我正在尝试使用pyOpenGL,但我无法让相机正常工作.
def Draw():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glRotatef(roty,1,0,0)
glRotatef(rotx,0,1,0)
glTranslate(0,0,eyez)
glPushMatrix()
glTranslate(0,0,-80)
glBegin(GL_QUADS)
glColor(0,1,0)
glVertex3f(-50,-5,10)
glVertex3f(-50,50,10)
glVertex3f(50,50,10)
glVertex3f(50,-5,10)
glColor(1,0,0)
glVertex3f(-50,-5,10)
glVertex3f(-50,50,10)
glVertex3f(-50,50,70)
glVertex3f(-50,-5,70)
glEnd()
glPopMatrix()
glutSwapBuffers()
Run Code Online (Sandbox Code Playgroud)
这些旋转效果很好,但我无法向相机朝向的方向前进.当我修改代码以便能够以这种方式向前移动时,场景将无法正确旋转.如果我回到足够远的地方,将会发生一个圆圈旋转的情况.
这个问题困扰着我.我正在测试一些Haskell绑定到OpenGL,我创建了一个顶点着色器,一个片段着色器,编译程序,并在转换顶点后在屏幕上绘制一个纹理矩形......除了屏幕是空白的.
当我渲染矩形平白而不是在片段着色器中使用采样器时,它工作正常.当我进入gdebugger并使用选项将所有纹理替换为存根纹理时,它也可以正常工作.
当我在gdebugger中查看分配的纹理时,没有纹理对象,只有默认的2d纹理.当我在glTexImage2d上设置断点时,我看到它被调用了,但是当我用gdebugger查看它时,内存中没有纹理对象出现.
这是怎么回事?我忘了设置一些环境变量吗?我很沮丧.踢球者之前我遇到过这个问题,然后我设法解决了这个问题,但我忘记了问题所在.我讨厌自己> _>
我遇到的问题是我不能让我的纹理以正确的比例渲染,并且由于某种原因,纹理也在重复自身,中间有一个空格.
这是我正在使用的纹理(我正在用这种纹理填充屏幕):

渲染时它看起来像这样(红色轮廓是整个屏幕,纹理使用1像素边框渲染):

这是代码:
package game;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.Timer;
import org.lwjgl.util.glu.GLU;
import org.newdawn.slick.opengl.TextureLoader;
public class WarZone {
private boolean done = false;
private String windowTitle = "War Zone";
private DisplayMode displayMode;
private Timer timer;
private float dt;
public static void main(String[] args) {
new WarZone().run(false);
}
public void run(boolean fullscreen) {
try {
init();
switchToOrtho();
while (!done) {
timer.tick();
update();
render();
Display.update();
}
cleanup();
} catch (Exception …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始学习opengl并且我使用VS2010终极sp1,但是当我添加opengl标头时,我收到的错误表明我没有创建的文件中存在错误.
#include "stdafx.h"
#include <Windows.h>
#include <gl\GL.h>
#include <gl\GLU.h>
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误(总共195个)这是我认为最常见的一个:
错误1错误C2008:'$':宏定义中的意外C:\ Program Files\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h 142
是否有可能削减QGLWidget?我的意思是我想削减它,以便我可以访问下面的gui.这听起来很奇怪,但将我的QGLWidget分成两部分对我来说将是很多工作.我希望你明白我的意思.谢谢
如何删除我制作的所有纹理?假设我加载了一些纹理:
GLuint tx_wall,tx_floor,tx_tiles;
tx_wall=LoadTexture("tex_wall.raw",512,512),
tx_floor=LoadTexture("tex_floor.raw",512,512),
tx_tiles=LoadTexture("tex_tiles.raw",512,512);
Run Code Online (Sandbox Code Playgroud)
然后使用它们:
glBindTexture(GL_TEXTURE_2D,tx_wall);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(0, 50, 0);
glTexCoord2f(1, 1); glVertex3f(0, 0, 14);
glTexCoord2f(0, 1); glVertex3f(0, 50, 14);
glEnd();
glBindTexture(GL_TEXTURE_2D,tx_floor);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
glTexCoord2f(1, 0); glVertex3f(50, 50, 0);
glTexCoord2f(1, 1); glVertex3f(50, 50, 0);
glTexCoord2f(0, 1); glVertex3f(0, 0, 0);
glEnd();
(and so on)
Run Code Online (Sandbox Code Playgroud)
当游戏结束时,删除它们:
glDeleteTextures(1,&tx_wall);
glDeleteTextures(1,&tx_floor);
glDeleteTextures(1,&tx_tiles);
Run Code Online (Sandbox Code Playgroud)
一切正常,但如果我有10或20个纹理,我将如何终止它们而不取名字?
我正在编写一个小游戏来教我自己的OpenGL渲染,因为它是我尚未解决的问题之一.我之前使用过SDL,同样的功能,虽然仍然表现不佳,但并没有像现在那样超越顶级.
基本上,我的游戏还没有太多进展,只是一些基本的动作和背景绘图.当我切换到OpenGL,它看起来好像是这样太快了.我的每秒帧数超过2000,此功能耗尽了大部分处理能力.
有趣的是,它的SDL版本中的程序使用了100%的CPU但运行顺畅,而OpenGL版本只使用了大约40% - 60%的CPU,但似乎对我的显卡征税,使我的整个桌面变得无法响应.坏.
它不是一个太复杂的功能,它根据玩家的X和Y坐标呈现1024x1024背景图块,以给出运动的印象,同时玩家图形本身保持锁定在中心.因为它是用于更大屏幕的小瓷砖,所以我必须多次渲染它以将瓷砖拼接在一起以获得完整的背景.下面代码中的两个for循环迭代12次,合并,所以我可以看到为什么当每秒调用2000次时这是无效的.
所以为了达到目的,这是邪恶的行为者:
void render_background(game_t *game)
{
int bgw;
int bgh;
int x, y;
glBindTexture(GL_TEXTURE_2D, game->art_background);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &bgw);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &bgh);
glBegin(GL_QUADS);
/*
* Start one background tile too early and end one too late
* so the player can not outrun the background
*/
for (x = -bgw; x < root->w + bgw; x += bgw)
{
for (y = -bgh; y < root->h + bgh; y += bgh)
{ …Run Code Online (Sandbox Code Playgroud) 我将开始研究一个新项目.这是一款使用OpenGL for Windows,Linux和Mac OS X的3D游戏.我将需要一个用于GUI,窗口和处理输入的库.我最终有3个选择Qt,WxWidgets和GTK +.所有这些都是LGPL许可证.
1- LGPL是否允许使用这些库来制作专有应用程序?
2-这3个申请中哪一个最适合我?
我想使用slick-util的教程在我的openGL应用程序之上呈现一串文本:http:// lwjgl.org/wiki/index.php?title=Slick-Util_Library_-_Part_3_-_TrueType_Fonts_for_LWJGL
这是我的初始代码:
private void init() {
try {
Display.setDisplayMode(new DisplayMode(640, 480));
Display.setVSyncEnabled(true);
Display.setTitle(this.windowTitle);
Display.create();
Keyboard.create();
} catch (LWJGLException e) {
Sys.alert("Error", "Initialization failed!\n\n" + e.getMessage());
System.exit(0);
}
/* OpenGL */
int width = Display.getDisplayMode().getWidth();
int height = Display.getDisplayMode().getHeight();
GL11.glViewport(0, 0, width, height); // Reset The Current Viewport
GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
GL11.glLoadIdentity(); // Reset The Projection Matrix
GLU.gluPerspective(45.0f, ((float) width / (float) height), 0.1f, 100.0f); // Calculate The Aspect Ratio Of The Window
GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The …Run Code Online (Sandbox Code Playgroud) 我有一个位图及其句柄(Win32 HBITMAP).有关如何在OpenGL四边形上绘制此位图的任何建议(通过缩放和拉动位图的4个角来适应四边形的4个顶点)?