好的,所以我目前正在使用LWJGL在Java中开发2d游戏。我对java及其工作原理有相当扎实的了解,并且了解游戏如何工作和LWJGL / openGL的基础知识,但我在渲染纹理方面遇到了一个非常奇怪的问题。我确定我在这里的一种绘制方法是罪魁祸首。
public static void texturedTriangleInverted(float x, float y, float width, float height, Texture texture) {
GL11.glPushMatrix();
{
GL11.glTranslatef(x, y, 0);
texture.bind();
GL11.glBegin(GL11.GL_TRIANGLES);
{
GL11.glVertex2f(width / 2, 0);
GL11.glTexCoord2f(width / 2, 0);
GL11.glVertex2f(0, height);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(width, height);
GL11.glTexCoord2f(1, 1);
}
GL11.glEnd();
}
GL11.glPopMatrix();
}
所以发生的事情是,如果我用这种方法渲染任何东西,那么下一个渲染的东西看起来像是字面上压缩了一端,在另一端被拉伸了,即使渲染的下一个东西不是用这种方法渲染的。我几乎可以肯定它与我传入Gl11.glTexCoord2f(float x,float y)
方法的参数有关,但我不知道如何修复它。
这是我的openGL初始化代码
private void initGL() {
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, Strings.DISPLAY_WIDTH, 0, Strings.DISPLAY_HEIGHT, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_TEXTURE_BINDING_2D);
GL11.glViewport(0, 0, Strings.DISPLAY_WIDTH, Strings.DISPLAY_HEIGHT);
GL11.glClearColor(0, 0, 1, 0);
GL11.glDisable(GL11.GL_DEPTH_TEST);
}
我的游戏循环代码
private void gameLoop() {
while (!Display.isCloseRequested()) {
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL11.glLoadIdentity();
GL11.glTranslatef(Strings.transX, Strings.transY, 0);
this.level.update();
this.level.render();
Display.update();
Display.sync(Strings.FPS_CAP);
}
Keyboard.destroy();
Display.destroy();
}
我的纹理加载代码(注意我使用光滑来加载我的纹理)
public static final Texture loadTexture(String location) {
try {
if (textureExists(location)) {
return TextureLoader.getTexture("png", new BufferedInputStream(new FileInputStream(new File(location))), false);
} else {
System.err.println("txture does not exist");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
您需要在它所引用的 glVertex
之前指定 glTexCoord
,而不是在它之后。这与 glColor
和 glNormal
相同,glVertex
使用您设置的最后一个属性。
问题内容: 我想知道判断Shape对象是否与另一个形状相交的最佳方法。目前,我在游戏中已对碰撞检测进行了分类,只要它涉及与矩形相交的Shape,反之亦然。我遇到的问题是Shape类中的intersects()方法只能将Rectangle或Point作为参数,而不能将另一个Shape用作参数。有没有一种有效的方法来测试两个Shape对象是否以任何方式重叠?我尝试的一种方法是使用for循环生成一个点区
如何在javaFx上得到2个图像或边界相交的碰撞?我移动一张图片,但是如果我触摸第二张图片,我想触发一些东西。 此代码不起作用
我有一个带有对象数组的组件,其中我正在根据字符串进行过滤。问题是当我尝试将此过滤器的返回设置为本地状态时,它会抛出错误,我不太理解原因。 所以,因为我希望这个数组处于我的状态,所以我决定这样做: 插入这一行后发生的事情是这样的: 它开始多次渲染。我假设,每次状态改变时,它都会重新渲染组件(如果我错了,请纠正我)。不过,我不知道它为什么要多次这样做。 因此,我想过使用 useEffect 来实现此处
重新渲染日程表的所有日程: .fullCalendar( 'rerenderEvents' ) 官方英文文档:http://arshaw.com/fullcalendar/docs/event_rendering/rerenderEvents/
渲染一个新的日程到日程表上: .fullCalendar( 'renderEvent', event [, stick ] ) event 是 Event Object 对象,至少含有 title 和 start 属性。 通常,用 renderEvent 方法添加的日程会在日程表重载数据(refetches)之后消失。可以将stick设置为true 官方英文文档:http://arshaw.com
日程从DOM中移除之前触发: function( event, element, view ) { } event 是 Event Object 对象。 element 是要被移除的 jQuery 对象。 此函数可以用来移除 eventRender 注册的插件。 官方英文文档:http://arshaw.com/fullcalendar/docs/event_rendering/eventDest