我在JOGL中构建一些东西,我希望通过使用键盘或鼠标来移动相机,这并不重要,只要相机可以平移物体并可能放大和缩小.如果使用键盘/鼠标很困难,那么我也不介意在应用程序中使用一些按钮,例如向上,向下,向左和向右箭头以及用于缩放的加号和减号按钮,但基本上最简单.我正在构建类似Lego的东西,但是如果不能移动相机就证明它非常困难.
我目前正在使用OpenGL使用glm库,我看到每个头文件(*.hpp)都有自己的实现文件(*.inl)但是每次编译项目时如何自动编译(或链接)glm?例如:
#include <glm/glm.hpp>
// We actualy dont included any *.inl files
// And in glm.hpp (or any *.hpp files) are not included too!
Run Code Online (Sandbox Code Playgroud)
但是在编译时,它没有错误!
我很好奇NURBS是如何在GPU/OpenGL图形管道中渲染的.我知道在OpenGL和GLUT中有各种调用,可以使用glMap和glMapGrid从编码角度轻松渲染NURBS对象,但我没有得到的是OpenGL完成此过程的过程.NURBS背后的想法是使用曲线来定义曲面,而图形管道似乎围绕三角形栅格化和三角形网格构建,而NURBS基于Bezier曲线,它们是弯曲的.
那么,从(高级)管道角度来看,NURBS实际上是如何实现的呢?
这是我加载纹理的代码.我试图使用此示例加载文件; 它是一个gif文件.我可以问一下是否可以加载gif文件,还是只能加载原始文件?
void setUpTextures()
{
printf("Set up Textures\n");
//This is the array that will contain the image color information.
// 3 represents red, green and blue color info.
// 512 is the height and width of texture.
unsigned char earth[512 * 512 * 3];
// This opens your image file.
FILE* f = fopen("/Users/Raaj/Desktop/earth.gif", "r");
if (f){
printf("file loaded\n");
}else{
printf("no load\n");
fclose(f);
return;
}
fread(earth, 512 * 512 * 3, 1, f);
fclose(f);
glEnable(GL_TEXTURE_2D);
//Here 1 is the texture …Run Code Online (Sandbox Code Playgroud) 正如在标题中我希望每帧/更新只能调用glBegin和glEnd一次,因为我已经听到并且正在经历如果你每次更新多次调用它会大幅减速.
这是我的渲染函数的代码:
GL11.glTranslatef(0, 0, -10);
int x = 0;
while (x < World.BLOCKS_WIDTH - 1) {
int y = 0;
while (y < World.BLOCKS_HEIGHT - 1) {
if( x * World.BLOCK_SIZE <= Display.getHeight() || y * World.BLOCK_SIZE <=
Display.getWidth() || x * World.BLOCK_SIZE >= 0 ||
y * World.BLOCK_SIZE >= 0 ) {
blocks.b[data.blocks[x][y]].draw(x + Main.PosX, y + Main.PosY);
}
y++;
}
x++;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
这是我的块类:
GL11.glPushMatrix();
GL11.glTranslatef(Xa * World.BLOCK_SIZE, Ya * World.BLOCK_SIZE, 0);
//GL11.glRotatef(0, 0, 1, 0);
//GL11.glRotatef(0, 1, …Run Code Online (Sandbox Code Playgroud) 我想通过使用鼠标将图像拖动到一行,当图像接近该行时,图像将自动移动到该行,就像一些"floor planner"程序------------你创建墙壁将门拖到墙上,当门靠近墙壁时,门会自动出现在墙上.
OpenGL可以做到吗?
如果可以的话,谁能告诉我怎么样?如果不能,有人能告诉我怎么做吗?
给我举个例子.
尝试设置一个Opengl上下文以呈现为位图,但我发现从Tbimap画布对象返回的句柄不断变化,因此渲染上下文不断抛出异常,因为它与创建渲染上下文的句柄不匹配.
我发现更改位图宽度或高度将更改句柄值,如果位图是在执行渲染的过程之外创建的,则每次输入过程时都会得到不同的句柄.
我需要这个保持静态,或者它有点无意义,有能力首先渲染到位图.
任何线索如何修复手柄?
我需要在OpenGL中制作国际象棋,并想知道这是否是正确的方法.
这是pawn piece的代码:
void pawn(void)
{
glClear (GL_COLOR_BUFFER_BIT);
DrawArc(xc+6, yc-3,1.3,M_PI/2,M_PI/2,25);
DrawArc(xc+6.7, yc-3,1.3,M_PI/2,-M_PI/2,25);
DrawArc(xc+6, yc-0.9,0.8,M_PI/2,M_PI,25);
DrawArc(xc+6.7, yc-0.9,0.8,M_PI/2,-M_PI,25);
DrawArc(xc+6.35, yc+0.25,0.5,(7*M_PI)/4,(3*M_PI)/2,25);
glBegin(GL_LINE_LOOP);
glVertex2d(xc+4.7,yc-3);
glVertex2d(xc+8,yc-3);
glEnd();
glFlush ();
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
我将在我的openGL应用程序中使用颜色选择.我想在创建每个对象时为其分配一个唯一的颜色代码.我的问题是如何进行RGB颜色值的排列.
我想要的是一个函数,RGB为每个调用返回一个唯一的颜色,这样我就可以将它分配给对象.例如,第一个调用将返回一个RGB颜色(1, 0, 0),下一个将具有(2, 0, 0)等等,直到它将返回(255, 255, 255).
所以我的问题是如何实现这个功能.我认为这个想法是使用排列,但我不知道如何开始.在c ++中是否已经实现了排列函数?
我已经实现了一个网格.它可以用线框渲染(三角形),但现在我想应用平面着色渲染,我得到的是没有体积的图,纯白色.
这是我用的:
for(int i=0; i<mesh->nt; i++) {
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
int i0 = mesh->triangles[i].vInds[0];
int i1 = mesh->triangles[i].vInds[1];
int i2 = mesh->triangles[i].vInds[2];
Vector n1 = GetNormal(mesh->vertices[i0], mesh->vertices[i1], mesh- >vertices[i2]);
glNormal3dv((double *)&n1);
glVertex3dv((double *)&mesh->vertices[i0]);
glVertex3dv((double *)&mesh->vertices[i1]);
glVertex3dv((double *)&mesh->vertices[i2]);
glEnd();
}
Run Code Online (Sandbox Code Playgroud)
我计算了三角形的法线但没有任何效果.任何的想法?