标签: opengl

GLUT退出重定义错误

在我的简单OpenGL程序中,我得到以下关于退出重定义的错误:

1>c:\program files\microsoft visual studio 8\vc\include\stdlib.h(406) : error C2381: 'exit' : redefinition; __declspec(noreturn) differs
1>        c:\program files\microsoft visual studio 8\vc\platformsdk\include\gl\glut.h(146) : see declaration of 'exit'
Run Code Online (Sandbox Code Playgroud)

我正在使用Nate Robins的GLUT for Win32,并在Visual Studio 2005或Visual C++ 2005(Express Edition)中出现此错误.导致此错误的原因是什么?如何解决?

opengl glut

31
推荐指数
2
解决办法
4万
查看次数

实施Ray Picking

我有一个使用directx和openGL的渲染器,以及一个3d场景.视口和窗口具有相同的尺寸.

如何以独立于平台的方式实现给定鼠标坐标x和y的拾取?

opengl math directx geometry picking

31
推荐指数
2
解决办法
3万
查看次数

在Linux中没有X.org的OpenGL

我想在Linux中打开没有X的OpenGL上下文.有没有办法做到这一点?

我知道集成英特尔显卡硬件是不可能的,尽管大多数人在他们的系统中都有nvidia卡.我想得到一个适用于nvidia卡的解决方案.

如果除了通过集成的英特尔硬件之外别无他法,我想可以知道它是如何完成的.

X11协议和协议本身太大而复杂.它提供的鼠标/键盘/平板电脑输入多路复用功能对于现代程序来说过于臃肿.我认为这是阻止Linux桌面改进的最糟糕的障碍,这就是我寻找替代方案的原因.

linux x11 opengl nvidia

31
推荐指数
2
解决办法
2万
查看次数

你可以在不打开窗口的情况下创建OpenGL上下文吗?

偶尔我会到达我想要获得OpenGL帧缓冲对象的地方,但是我对打开任何类型的窗口都不感兴趣.

是否可以创建一个opengl上下文而不将其附加到任何类型的窗口?

opengl

30
推荐指数
2
解决办法
1万
查看次数

如何获取片段的当前颜色?

我试图在GLSL中围绕着色器,我已经找到了一些有用的资源和教程,但是我一直在为一些应该是根本和微不足道的东西碰壁:我的片段着色器如何检索颜色目前的片段?

你可以通过说明来设置最终颜色gl_FragColor = whatever,但显然这是一个仅输出值.如何获得输入的原始颜色,以便对其进行计算?这必须在某个地方变量,但如果有人知道它的名字,他们似乎没有在我到目前为止遇到的任何教程或文档中记录它,它正在推动我的问题.

opengl shader glsl fragment-shader

30
推荐指数
4
解决办法
4万
查看次数

3d加速度计计算方向

我有3轴的加速度计值(通常只有重力包含介于-1.0和1.0之间的数据):

  float Rx;
  float Ry;
  float Rz;
Run Code Online (Sandbox Code Playgroud)

我做了躯体计算,然后我得到每个轴的角度.

  float R =  sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2));
  float Arx = acos(Rx/R)*180/M_PI;
  float Ary = acos(Ry/R)*180/M_PI;
  float Arz = acos(Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud)

然后我在opengl中设置框角度的值

rquad = Arx;
yquad = Ary;
Run Code Online (Sandbox Code Playgroud)

哪个旋转我的盒子:

glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Run Code Online (Sandbox Code Playgroud)

它适用于半球.我想使用完整的球体,我知道我必须使用Arz值使其工作,但我不知道如何使用它进行此旋转.你可以帮帮我吗?

更新:最终答案在我的情况下:

  rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
  yquad = -atan2(Ry/R, Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud)

c opengl math

30
推荐指数
3
解决办法
4万
查看次数

OpenGL,如何创建"颠簸的多边形"?

我不确定如何描述我追求的东西,所以我画了一张图片来帮助:

OpenGL问题

我的问题是,在OpenGL中是否有可能在单个多边形上创建那些像素看起来凹凸的错觉,而不必诉诸于使用多个多边形?如果是的话,方法是什么?

c++ opengl 3d graphics

30
推荐指数
4
解决办法
1440
查看次数

Opengl像素完美2D绘图

我正在研究2d引擎.它已经工作得很好,但我不断得到像素错误.

例如,我的窗口是960x540像素,我从(0,0)到(959,0)画一条线.我希望扫描线0上的每个像素都会被设置为一种颜色,但是没有:最右边的像素没有被绘制.当我垂直绘制到像素539时,同样的问题.我真的需要绘制到(960,0)或(0,540)来绘制它.

由于我出生在像素时代,我确信这不是正确的结果.当我的屏幕大于320x200像素时,我可以从0到319以及从0到199进行绘制,我的屏幕将会满.现在我最终得到一个没有绘制右/底像素的屏幕.

这可能是由于不同的原因:我期望将opengl线基元从像素绘制到包含像素,最后一个像素实际上是独占的?是吗?我的投影矩阵不正确?我有一个错误的假设,当我有一个960x540的后备缓冲区时,实际上有一个像素更多?别的什么?

有人可以帮帮我吗?我一直在研究这个问题很长一段时间,每当我认为它没问题的时候,我看了一会儿它实际上没有.

这是我的一些代码,我试图尽可能地删除它.当我调用我的线函数时,每个坐标都加上0.375,0.375,以使它在ATI和nvidia适配器上都正确.

int width = resX();
int height = resY();

for (int i = 0; i < height; i += 2)
    rm->line(0, i, width - 1, i, vec4f(1, 0, 0, 1));
for (int i = 1; i < height; i += 2)
    rm->line(0, i, width - 1, i, vec4f(0, 1, 0, 1));

// when I do this, one pixel to the right remains undrawn

void rendermachine::line(int x1, int y1, int x2, int y2, const vec4f &color) …
Run Code Online (Sandbox Code Playgroud)

opengl drawing pixel-perfect

30
推荐指数
2
解决办法
2万
查看次数

glVertexAttribPointer提升GL_INVALID_OPERATION

我正在尝试整合一个非常基本的OpenGL 3.2(核心配置文件)应用程序.在下面的代码中,应该创建一个包含三角形顶点位置的VBO,调用glVertexAttribPointer失败并引发OpenGL错误GL_INVALID_OPERATION.这是什么意思,我该如何解决它?

GLuint vbo, attribLocation = glGetAttribLocation(...);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 };
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(attribLocation);
// At this point, glGetError() returns GL_NO_ERROR.
glVertexAttribPointer(attribLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);
// At this point, glGetError() returns GL_INVALID_OPERATION.
Run Code Online (Sandbox Code Playgroud)

c++ opengl opengl-3

30
推荐指数
1
解决办法
1万
查看次数

如何正确地将库与cmake链接?

我无法使用我正在使用的其他库来正确链接到我的项目中.

我正在使用CLion,它使用cmake来构建它的项目.我试图将几个库与OpenGL结合使用来构建一些对象.我最初在Visual Studio中构建它,因为我无法弄清楚如何让cmake与Clion一起工作.但是,现在代码全部工作(无论如何都在Visual Studio中),我希望能够使用CLion,因为这是我首选的IDE.

我还是cmake的新手,我不明白我的错误CMakeLists.txt.这是我有的:

cmake_minimum_required(VERSION 3.3)
project(texture_mapping)
find_package(OpenGL REQUIRED)
link_directories(${OPENGL_gl_LIBRARY})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp camera.h display.h display.cpp mesh.cpp mesh.h obj_loader.cpp obj_loader.h shader.cpp shader.h stb_image.c stb_image.h texture.cpp texture.h transform.h)

link_directories(texture_mapping ${PROJECT_SOURCE_DIR}/lib)

add_executable(texture_mapping ${SOURCE_FILES})

target_include_directories(texture_mapping PUBLIC ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(texture_mapping SDL2 SDL2main SDL2test glew32 glew32s ${OPENGL_gl_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

我调整它直到它没有在CLion中给我任何更多的错误,但我的代码仍然无法识别头文件.

这是我的项目的结构:
项目结构

所以,我放了我需要的所有库,但它似乎没有在代码中识别它们.Clion在项目中识别它们(它们没有出现错误的红色),但是当它构建时(当我尝试在CLion中运行它时),我得到这些错误:

CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4MeshD2Ev':
...texture-mapping/mesh.cpp:30: undefined reference to `_imp____glewDeleteVertexArrays'
CMakeFiles\texture_mapping.dir/objects.a(mesh.cpp.obj): In function `ZN4Mesh8InitMeshERK12IndexedModel':
...texture-mapping/mesh.cpp:36: undefined reference to `_imp____glewGenVertexArrays'
...texture-mapping/mesh.cpp:37: undefined reference to `_imp____glewBindVertexArray'
...texture-mapping/mesh.cpp:39: undefined reference to `_imp____glewGenBuffers'
...texture-mapping/mesh.cpp:40: undefined reference …
Run Code Online (Sandbox Code Playgroud)

c++ opengl cmake undefined-reference

29
推荐指数
1
解决办法
5万
查看次数