标签: opengl

如何在Mac OSX上使用distutils使用python C++扩展编译OpenGL?

当我尝试它时,我得到:

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)

c++ python opengl macos distutils

25
推荐指数
1
解决办法
1052
查看次数

GLSL:如何获得像素x,y,z世界位置?

我想根据它们在世界上的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:添加了我的完整代码

opengl glsl fragment-shader

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

我如何知道我使用的是哪个版本的OpenGL?

我开始使用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会被自动使用吗?

opengl

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

OpenGL闪烁/损坏,窗口调整大小并且DWM处于活动状态

我有一个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中执行此操作,我没有看到解决方法.

有谁知道更好的解决方案吗?

在有人要求之前我肯定会做以下事情:

  • Window类有CS_OWNDC
  • WM_ERASEBACKGROUND不执行任何操作并返回TRUE.
  • 启用双缓冲.
  • Windows具有WS_CLIPSIBLINGS和WS_CLIPCHILDREN窗口样式.
  • 在我的resize事件处理程序中,我立即重新绘制窗口.

我试过了:

  • 在像素格式描述符中设置PFD_SUPPORT_COMPOSITION.
  • 不在paint处理程序中使用wxPaintDC而是调用:: ValidateRect(hwnd,NULL).
  • 处理WM_NCPAINT并排除客户区
  • 通过DWM API禁用NC涂料
  • 在paint事件中排除客户区
  • 在缓冲区交换之前和之后调用glFlush和/或glFinish.
  • 在每个油漆事件中使窗口无效(作为测试!) - 仍然闪烁!
  • 不使用共享GL上下文.
  • 禁用双缓冲.
  • 写入GL_FRONT_AND_BACK

禁用DWM不是一种选择.

据我所知,如果你在OpenGL上使用Direct3D,这甚至是一个问题,虽然我没有测试过它,因为它代表了很多工作.

c++ windows opengl direct3d dwm

25
推荐指数
1
解决办法
2608
查看次数

ImportError:没有名为OpenGL.GL的模块

我正在尝试使用Python 2.7.3 在这里运行NeHe的教程,但它正在抛出错误ImportError: No module named OpenGL.GL

那么我该如何解决这个问题呢?这是代码:

from OpenGL.GL import *
Run Code Online (Sandbox Code Playgroud)

python opengl

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

(现代)OpenGL有Clojure包装吗?

我发现的唯一的东西是Penumbra,它似乎包含了OpenGL 1.1,我至少不在乎.它实际上不需要做任何花哨的事情,LWJGL的包装器在一个命名空间中暴露OpenGL 3.3/core或OpenGL 4.x/core就足够了 - 我不介意一个更惯用的包装器,只要它不做任何立即模式绘图并支持GLSL 3.3我基本上很开心.

opengl clojure lwjgl

25
推荐指数
2
解决办法
6266
查看次数

修改OpenGL顶点缓冲区的正确方法是什么?

我在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)

...会用新数据覆盖旧缓冲区吗?或者我还必须删除旧的?有没有更好的办法?

opengl

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

KDE桌面效果中的OpenGl和XRender有什么区别?

在KDE环境中,当您转到桌面效果时,在高级选项卡中有一个名为"合成类型"的选项,可以将其设置为OpenGl或XRenderer.

  1. 这两个选项有什么区别?

  2. 每个选项的用例是什么?

linux opengl kde

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

Python中的Tkinter OpenGL上下文

我需要在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进行了测试.

python opengl tk-toolkit tkinter

24
推荐指数
1
解决办法
8601
查看次数

OpenGL中三角形卷绕方向的实际标准是什么?

我们在三角形缠绕方向有两种选择,

  1. 顺时针
  2. 逆时针

无论如何,他们之间的转换可能需要一些费用 我想尽可能避免转换,为此,我需要知道卷绕方向的事实标准.我认为有一个是因为很多大公司都在使用OpenGL,我认为如果大多数公司都使用一个方向,那就是事实上的标准.

如果没有这样的话,请告诉我.

opengl standards gl-triangle-strip

24
推荐指数
2
解决办法
8884
查看次数