我在如何计算三维空间中视锥体的边界点的图表之后绘制了图表.首先,我有两组数据,每组包含三个值:摄像机的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轴进行相同的切割以显示相同的过程但是具有玩家向上或向下看的角度.
启动时,我的程序立即抛出ExceptionInInitializerError.来源来自这种方法:
public static void errorMessage(String input) {
System.err.println("[ERROR] " + form.format(date) + " - " + Thread.currentThread().getStackTrace()[3].getClassName() + ": " + input);
}
Run Code Online (Sandbox Code Playgroud)
我打印出字符串的不同部分,发现只有在调用form.format(date)时才会抛出错误.它说它是空的.唯一的问题是,日期和表单都是在这个方法之上静态声明的,因为:
public static Date date = new Date();
public static DateFormat form = new SimpleDateFormat("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
在修复一些小错误之后,错误突然开始被抛出.我不知道出了什么问题或者出了什么问题.我的意思是,我在同一个类中调用静态声明的变量.从技术上讲,它们不应该是空的,但它们是.任何人有任何想法,为什么它会抛出这个错误?这是控制台输出:
java.lang.ExceptionInInitializerError
at A$$OpSystem.getOperatingSystem(A$.java:98)
at A_.<clinit>(A_.java:19)
Caused by: java.lang.NullPointerException
at A$.errorMessage(A$.java:72)
at A$.loadCursor(A$.java:84)
at A$.<clinit>(A$.java:62)
... 2 more
Exception in thread "main"
Run Code Online (Sandbox Code Playgroud)
顺便说一句,A $ .OpSystem.getOperatingSystem只在那里显示,因为它调用A $ .errorMessage ...
我之前遇到过这个问题,就是当一个静态声明的变量在被调用时实际上从未声明为null时.现在它不应该是null,但它确实是.所以我不知道是什么导致了它.想法?
但我想这是一个了解静态变量如何实际加载的好时机......
编辑:如果我将调用'loadCursor'的静态Cursor对象移动到另一个类,似乎没有抛出异常.什么?
我对这种情况进行了测试但它没有返回任何错误?
public class StaticMethodTesting {
public static int i = getInt(); …Run Code Online (Sandbox Code Playgroud) 我String今天正在使用相对较大的阵列.(大约400 x 400)我想知道如何使一个阵列与另一个阵列完全相同.例如,
String[][] array1 = new String[400][400];
String[][] array2 = array1;
Run Code Online (Sandbox Code Playgroud)
使一个数组等于另一个数组与循环每个元素并使其等于另一个数组中的相应位置相同吗?(如下)
for(int y = 0; y < 400; y++) {
for(int x = 0; x < 400; x++) {
array2[x][y] = array1[x][y];
}
}
Run Code Online (Sandbox Code Playgroud)
现在循环方法与使一个数组等于另一个数组相同吗?或者第一/第二快于另一个?就个人而言,我认为第一个会更快,因为没有递归或者必须array2在递归之前手动分配内存.但是,我不知道从哪里开始寻找这些信息,我想了解Java如何处理这些事情.
我知道OpenGL已弃用,并在新版本中删除了GL_QUADS.我听说这是因为现代GPU只用三角形渲染,所以调用四边形只会让GPU更难将它分成两个三角形(我听说无论如何,我不是任何一个专家这个话题).
我想知道它是否更好(假设一般人的CPU比他们的GPU更快,相对而言)只是手动将四边形渲染成两个三角形,或者让GPU自己做.再说一遍,我刚刚开始时,我对OpenGL没有真正的经验.我宁愿知道这些天大多数机器哪个更好,所以我可以把注意力集中在渲染方法*上.谢谢.
*然而,为了它,我可能会使用'三角法'.
我有一个名为Player的类,它有一个构造函数,它在我的"player.h"文件中声明了5个float参数,然后在我的"player.cpp"文件中初始化,如帖子底部所示.
每当我尝试运行程序时,我都会收到错误:
build/Debug/MinGW-Windows/player.o: In function `Player':
C:\Users\User\Dropbox\NetBeans Workspace\Testing/player.cpp:11: multiple definition of `Player::Player(float, float, float, float, float)'
build/Debug/MinGW-Windows/main.o:C:\Users\User\Dropbox\NetBeans Workspace\Testing/player.h:20: first defined here
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我尝试在构造函数之前删除"public:",但这根本没有帮助.它说我有多个构造函数的定义,但我只初始化一次.我确信这是显而易见的.
这两个文件的完整来源:
"player.cpp"
#include "player.h"
Player::Player(float x, float y, float z, float rx, float ry) {
}
Run Code Online (Sandbox Code Playgroud)
"player.h"
#ifndef PLAYER_H
#define PLAYER_H
class Player {
public:
Player(float x, float y, float z, float rx, float ry);
};
#endif
Run Code Online (Sandbox Code Playgroud) 我有另一个套接字问题.与我的其他问题相比,这实际上相当奇怪.好的,我有一个客户端连接到服务器,该服务器通过ObjectOutputStream以恒定速率发送数据,并通过ObjectInputStream接收数据.我有一个列有播放器对象的列表,其中包含玩家坐标,游戏模式等.当客户端移动其播放器时,更新的坐标将被发送到服务器,并更新列表中该播放器的对象.好吧,应该更新...我打印出服务器端更改的坐标,但是当我将列表发送到播放器打印出来时,坐标没有改变.这是玩家类:
public static class Player implements Serializable {
private static final long serialVersionUID = 8841477887428285969L;
public int x, y, gamemode, ID;
public String name;
public Player(int x, int y, int gamemode, int ID, String name) {
this.x = x;
this.y = y;
this.gamemode = gamemode;
this.ID = ID;
this.name = name;
}
public void setPosition(int x, int y) {
this.x = x;
this.y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
服务器接收更新的坐标并打印前后输出:
Package.Client_Server main_packet = (Package.Client_Server) obj;
System.out.println(S00.getPlayerByID(ID).x + ", " + S00.getPlayerByID(ID).y);
S00.getPlayerByID(ID).setPosition(main_packet.x, …Run Code Online (Sandbox Code Playgroud) 如果你想在观看平截头体中一次渲染一个包含数千个多边形的大型景观,以及用户的视点不断变化,那么使用VAO或VBO是否切实可行?
我的意思是,每次玩家的位置或相机旋转发生变化时,您都必须重新计算顶点数据,以便正确地剔除任何不再看到的顶点或场景,以保持良好的FPS计数.但是在这样做时,你的FPS计数会下降,因为你正在不断地重新打包所有缓冲区.
那么在立即模式下使用这两种方法仍然有益吗?
我的猜测是肯定的,因为使用立即模式,你也可以重新计算每一帧的所有顶点,只是略有不同.可悲的是,我没有太多的背景,我很困惑,因为互联网上有关于这个主题的混合信息.
这是一个奇怪的问题,但值得一提的是:有没有办法在不使用密钥监听器,密钥绑定,密钥调度程序等的情况下在Java中一般性地获取密钥事件?这里的目标是不使用任何重载的类(例如new KeyListener(){...}).
我试图看看我能做多么小的简单游戏,并且使用重载类相对于普通代码占用相当多的空间,因为它们在打包到jar时需要自己的整个类文件.
我正在尝试使用Java及其允许内存泄漏的能力.我写出了这个简单的代码:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
class Obj {
int i;
Obj(int i) {
this.i = i;
}
}
List<Obj> list;
while(true) {
list = new ArrayList<Obj>();
for(int i = 0; i < 1000; i++) {
Obj o = new Obj(i);
list.add(o);
}
try {
Thread.sleep(1); //<-- added to give the gc time to trash the previous iteration
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
执行此操作时(特别是每次迭代时将更多对象添加到列表中),您可以快速查看使用的内存量.我能够非常快速地达到2千兆字节,每次迭代都会添加10000个对象.看起来好像列表(以及利用"链接列表"列表的其他类型的对象,如函数)不喜欢被删除.
当我没有将对象添加到列表中时,内存堆根本没有增加(意味着垃圾处理正在完成它的工作).我尝试将列表重置为每次迭代时为null,然后重新声明它以及调用clear()方法.似乎没什么用.每当我在循环中使用List时,我的RAM就会呼救.
那么,为什么会这样呢?为什么垃圾处理不会在每次迭代时都摆脱列表而不是让它们堆叠起来?List接口是否不允许这种用法?我只是不给垃圾处理足够的时间摆脱最后一例?
我有完全相同的问题,因为在用户这一问题.我正在使用此代码:
function imgData(img) {
var src_canvas = document.createElement('canvas');
src_canvas.width = this.width;
src_canvas.height = this.height;
var src_ctx = src_canvas.getContext('2d');
src_ctx.drawImage(img, 0, 0);
var src_data = src_ctx.getImageData(0, 0, this.width, this.height).data;
}
Run Code Online (Sandbox Code Playgroud)
它总是在Chrome上生成此错误:
Uncaught SecurityError: An attempt was made to break through the security policy of the user agent. Resources.js:27
Unable to get image data from canvas because the canvas has been tainted by cross-origin data. Resources.js:27
Run Code Online (Sandbox Code Playgroud)
我是JavaScript的新手,不知道这里有什么问题.今天互联网似乎也处于亏损状态,所以我现在在这里.我引用的问题的答案是指他试图使用来自外部源(他的文件系统之外)的图像的问题.问题是,我不是.我只是在我的文件系统上运行Chrome中的文件.该图像也在我的文件系统中,而不是我认为值得出现安全错误的任何地方.有什么想法吗?我是个白痴吗?
java ×5
class ×2
geometry ×2
list ×2
lwjgl ×2
opengl ×2
3d ×1
arrays ×1
buffer ×1
c++ ×1
canvas ×1
client ×1
compression ×1
constructor ×1
frustum ×1
gpu ×1
header ×1
image ×1
indices ×1
javascript ×1
keyevent ×1
loops ×1
memory-leaks ×1
object ×1
security ×1
sockets ×1
static ×1
string ×1
trigonometry ×1
vertices ×1