我有一些树,这些树大大落后于游戏,所以我想检查一下树是否在镜头前.

我从数学论坛得到了一些帮助,还看了一下这个链接,帮助我将俯仰/偏航转换为所需的方向向量.
但出于某种原因,每当我将摄像机向左移动时,树木都会变得可见,每当我向右移动它们时,它们就会变得不可见(因此,如果摄像机指向Z轴上的+1,它似乎正在渲染树,但Z轴上的-1,似乎没有渲染它们).
(请参阅http://i.gyazo.com/cdd05dc3f5dbdc07577c6e41fab3a549以获得不那么跳跃的.mp4)
我使用以下代码检查对象是否在相机前面:
Ship you = shipsID.get(UID);
int dis = 300;
Vector3f X = new Vector3f(camera.x(), camera.y(), camera.z());
float x = (float) (Math.cos(Math.toRadians(camera.yaw()))*Math.cos(Math.toRadians(camera.pitch())));
float y = (float) (Math.sin(Math.toRadians(camera.yaw()))*Math.cos(Math.toRadians(camera.pitch())));
float z = (float) Math.sin(Math.toRadians(camera.pitch()));
Vector3f V = new Vector3f(x, y, z);
for (Tree tree : trees){
Vector3f Y = new Vector3f(tree.location.x, tree.location.y, tree.location.z);
Vector3f YMinusX = Y.negate(X);//new Vector3f(Y.x - X.x, Y.y - X.y, Y.z - X.z);
float dot = Vector3f.dot(YMinusX, V);
if (dot …Run Code Online (Sandbox Code Playgroud) 我已经使用eclipse在java中开发了几个月的游戏,我一直在试图弄清楚如何查看内存使用情况以及使用最多内存的内容.任何人都可以给我一步一步的答案,我将如何做到这一点?谢谢.
我已经使用lwjgl(opengl)成功实现了一个简单的2-d游戏,当对象越来越远离玩家时,对象逐渐消失.这种衰落最初是通过计算距离玩家的每个对象的原点的距离并使用它来缩放对象的alpha /不透明度来实现的.
但是,当使用较大的对象时,这种方法看起来有点过于粗糙.我的解决方案是为对象中的每个像素实现alpha/opacity缩放.这不仅看起来更好,而且还会将计算时间从CPU转移到GPU.
我想我可以使用FBO和临时纹理来实现它.
通过绘制到FBO并使用特殊混合模式用预先计算的距离图(纹理)对其进行遮罩,我打算实现这种效果.算法是这样的:
0)初始化opengl和设置FBO
1)将背景渲染到标准缓冲区
2)切换到自定义FBO并清除它
3)渲染对象(到FBO)
4)使用距离纹理掩码FBO
5)切换到标准缓冲区
6)渲染FBO临时纹理(到标准缓冲区)
7)渲染hud元素
一些额外的信息:
这确实达到了预期的效果.然而,当我进行一些性能测试时,我发现我的FBO方法削弱了性能.我通过请求1000次连续渲染并测量时间来测试.结果如下:
在512x512分辨率:
在1680x1050分辨率:
正如你所看到的,这非常严重.更糟糕的是,我打算做这种类型的第二次传球.我测试的机器应该是我的目标观众的高端,所以我可以期望人们使用这种方法远远低于60 fps,这对于这么简单的游戏来说是难以接受的.
我能做些什么来挽救我的表现?
我在如何计算三维空间中视锥体的边界点的图表之后绘制了图表.首先,我有两组数据,每组包含三个值:摄像机的xyz坐标和围绕x,y和z轴的旋转.给定一定的视距,应该可以计算出6个平面中每个平面的边界点.我一直用这些方程来计算远平面的宽度和高度:
hfar = 2 * tan(45/2) * view_distance
wfar = hfar * ratio
Run Code Online (Sandbox Code Playgroud)
hfar是远平面的高度,wfar是宽度,比率是视口宽度除以高度的比率.我一直在使用下图来试图找出它:

我需要找到由(?,?,?)注释的点.我一直试图计算这些值几天,但无济于事.任何帮助,将不胜感激.
此外,可以在此处和此处找到一些提供有关该主题的信息的好消息来源.
编辑:我掀起的另一个图像显示通过y轴的单个切片向下看x轴.它显示的信息与上图相同,但它也显示了我的问题:我无法计算远平面的每个边界点的正确z轴值.
请记住,可以通过x轴进行相同的切割以显示相同的过程但是具有玩家向上或向下看的角度.
有没有人知道任何适合OpenGL初学者的轻量级Java游戏库教程?我注意到youtube上有一些但它们只涵盖了创建窗口和将2D四边形渲染到屏幕的基础知识,并且通常是不完整的.此外,LWJGL网站提供了小型教程,但似乎只是在设置窗口和轮询输入的基础知识上.
欢迎大家提出意见.
我正在开发纸牌游戏,目前有一个很好的基础,但是当我在eclipse中运行它时遇到了一个错误.我也使用光滑的2d.
这是控制台的错误.
线程"main"中的异常java.lang.RuntimeException:当前线程中找不到OpenGL上下文.在在org.lwjgl.opengl.GL11.glGetError(GL11.java:1277)在org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glGetError(ImmediateModeOGLRenderer org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)的.java:387)在org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:337)在org.newdawn.slick.opengl.InternalTextureLoader.getTexture(InternalTextureLoader.java:275)在org.newdawn.slick.图像.(Image.java:270)在org.newdawn.slick.Image.(Image.java:244)在org.newdawn.slick.Image.(Image.java:232)在org.newdawn.slick.Image. (Image.java:198)在Cards.Card.(Card.java:18)
代码我相信发生错误的来源(卡类)
package Cards;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
public class Card
{
final int numCards = 52;
Image[] card = new Image [numCards];
Card (int c)
{
String fileLocation = new String ();
for (int i = 1 ; i <= 52 ; i++)
{
fileLocation = "res/cards/" + i + ".png";
try
{
card [i] = new Image (fileLocation); //line
}
catch (SlickException e)
{
e.printStackTrace ();
}
}
}
public Image getImage (int cardlocation) …Run Code Online (Sandbox Code Playgroud) 起初,它似乎很明显......无论在哪里找到4个指数,每个面都会生成2个三角形,对吧?
含义如下:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2 -1
Run Code Online (Sandbox Code Playgroud)
......反过来,需要转换为:
v 1.000000 1.000000 0.000000
v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2
f -2 -3 -1
Run Code Online (Sandbox Code Playgroud)
当然,这个特定的例子可以正确呈现.
但是,并非所有情况都像将面分割成两个面一样简单(其中第一个面包含原始面的前三个顶点,第二个面包含最后3个顶点,如上例所示).以下面的多维数据集为例:
v 0.000000 1.000000 1.000000
v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 …Run Code Online (Sandbox Code Playgroud) 我找不到VM参数的文档-XstartOnFirstThread.似乎我在Mac上通过LWJGL运行JOGL是必要的.这是什么意思?似乎某些进程需要线程0.这是正确的吗?
请注意:run()我的主要课程中有一个方法.它似乎没有覆盖任何东西,我没有实现runnable.
我在这里运行的示例源代码:http://www.lwjgl.org/guide
我正在尝试使用平面着色在 LWJGL OpenGL 中渲染 3D 棱镜。例如,我有一个索引如下的多维数据集:
我的顶点缓冲区中只有 8 个顶点,我已按上述方式对其进行了索引。有没有办法在立方体上实现平坦的法线着色,如下所示?如果可能的话,我不想重写我的顶点和索引缓冲区以包含重复的顶点。
我正在尝试做的是从我的相机投射光线.我知道相机的x,y和z坐标,以及它的俯仰和偏航.我需要计算它的方向向量,这样我就可以将它传递给我的光线追踪算法.
相机的向上矢量为(0,1,0).从相机的角度来看,"俯仰"正在向上和向下看.
(我更愿意不使用矩阵,但如果必须,我会这样做)