当我尝试它时,我得到:
ImportError:dlopen(/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/cscalelib.so,2):找不到符号:_glBindFramebufferEXT引用自:/Library/Frameworks/Python.framework /Versions/2.5/lib/python2.5/site-packages/cscalelib.so期望:动态查找
我在setup.py文件中尝试了各种各样的东西.我真的需要把它放到哪里才能正确链接到OpenGL?我的代码编译得很好,所以没有必要把它放在那里.这是setup.py
from distutils.core import setup, Extension
module1 = Extension('cscalelib',
extra_compile_args = ["-framework OpenGL", "-lm", "-lGL", "-lGLU"],
sources = ['cscalelib.cpp'])
setup (name = 'cscalelib',
version = '0.1',
description = 'Test for setup_framebuffer',
ext_modules = [module1])
Run Code Online (Sandbox Code Playgroud) 我想根据它们在世界上的xyz位置来调整颜色.
我在片段着色器中试过这个:
varying vec4 verpos;
void main(){
vec4 c;
c.x = verpos.x;
c.y = verpos.y;
c.z = verpos.z;
c.w = 1.0;
gl_FragColor = c;
}
Run Code Online (Sandbox Code Playgroud)
但似乎颜色根据我的相机角度/位置而变化,我如何使坐标独立于我的相机位置/角度?
继承人我的顶点着色器:
varying vec4 verpos;
void main(){
gl_Position = ftransform();
verpos = gl_ModelViewMatrix*gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)
Edit2:改变标题,所以我想要世界坐标,而不是屏幕坐标!
Edit3:添加了我的完整代码
我开始使用GLFW和OpenGL在C(现在)编写程序.我的问题是,我怎么知道我的程序将使用哪个版本的OpenGL?我的笔记本电脑说我的视频卡有OpenGL 3.3.输入"glxinfo | grep -i opengl"返回:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce 9600M GT/PCI/SSE2
OpenGL version string: 3.3.0 NVIDIA 285.05.09
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler
OpenGL extensions:
Run Code Online (Sandbox Code Playgroud)
那么OpenGL 3.3会被自动使用吗?
我有一个wxWidgets应用程序,它有许多子opengl窗口.我正在使用自己的GL画布类,而不是wx类.Windows共享他们的OpenGL上下文.我不认为它是wxwidgets的事实在这里真的很重要.
opengl窗口是窗口的子窗口,它们是彼此的兄弟,包含在选项卡控件中.MDI样式界面的种类,但它不是MDI窗口..每个窗口都可以单独调整大小.除非启用Aero且DWM处于活动状态,否则一切都很可爱.
调整任何窗口(甚至不是opengl窗口)的大小会导致所有opengl窗口偶尔闪烁,其中包含一个陈旧的后备存储视图,其中包含屏幕上那个非opengl的垃圾.这仅在启用Aero时发生.
我很确定这是DWM实际上没有在其绘图表面后备存储上的opengl内容,并且窗口没有在正确的时刻重新绘制.
我已经尝试了很多东西来解决这个问题,我确实有一个解决方案,但它不是很好,并且需要将带有glReadPixels的帧缓冲区读入DIB,然后在我的onPaint例程中将其渲染到绘制DC.这种解决方法仅在DWM处于活动状态时才启用,但我根本不必这样做,因为它会稍微损害性能(但在功能强大的系统上也不会太糟糕 - 场景是相对简单的3d图形).也不推荐混合使用GDI和opengl,但这种方法令人惊讶.我现在可以忍受它,但我宁愿不必.如果我想截取子窗口的截图,我仍然需要在WM_PRINT中执行此操作,我没有看到解决方法.
有谁知道更好的解决方案吗?
在有人要求之前我肯定会做以下事情:
我试过了:
禁用DWM不是一种选择.
据我所知,如果你在OpenGL上使用Direct3D,这甚至是一个问题,虽然我没有测试过它,因为它代表了很多工作.
我正在尝试使用Python 2.7.3 在这里运行NeHe的教程,但它正在抛出错误ImportError: No module named OpenGL.GL
那么我该如何解决这个问题呢?这是代码:
from OpenGL.GL import *
Run Code Online (Sandbox Code Playgroud) 我发现的唯一的东西是Penumbra,它似乎包含了OpenGL 1.1,我至少不在乎.它实际上不需要做任何花哨的事情,LWJGL的包装器在一个命名空间中暴露OpenGL 3.3/core或OpenGL 4.x/core就足够了 - 我不介意一个更惯用的包装器,只要它不做任何立即模式绘图并支持GLSL 3.3我基本上很开心.
我在OpenGL中设置一个顶点缓冲区,如下所示:
int vboVertexHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_DYNAMIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
稍后,如果我想向"vertexData"添加或删除顶点,那么执行此操作的正确方法是什么?它甚至可能吗?我假设我不能直接修改数组而不将其重新发送到GPU.
如果我修改了vertexData数组,那么再次调用它:
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_DYNAMIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
...会用新数据覆盖旧缓冲区吗?或者我还必须删除旧的?有没有更好的办法?
在KDE环境中,当您转到桌面效果时,在高级选项卡中有一个名为"合成类型"的选项,可以将其设置为OpenGl或XRenderer.
这两个选项有什么区别?
每个选项的用例是什么?
我需要在Tkinker中创建一个OpenGL上下文,以便将它与PyOpenGL Python模块一起使用.
Tkinker本身并不支持OpenGL上下文,但我发现PyOpenGL文档此页,讲解如何使用的包装,包括为这个模块中: http://pyopengl.sourceforge.net/documentation/context/
我试图运行提供的代码,但我收到一条消息说没有找到TOGL模块.我从http://togl.sourceforge.net/下载了该模块,但无法使其工作.
PS.我使用virtualenv在Mac OS X上使用Python 3.2进行了测试.
我们在三角形缠绕方向有两种选择,
无论如何,他们之间的转换可能需要一些费用 我想尽可能避免转换,为此,我需要知道卷绕方向的事实标准.我认为有一个是因为很多大公司都在使用OpenGL,我认为如果大多数公司都使用一个方向,那就是事实上的标准.
如果没有这样的话,请告诉我.