我刚刚购买了第五版的OpenGL SuperBible.我很高兴他们避免使用已弃用的功能,但他们的例子可以使用GLTools.GLTools提供了一系列有用的功能,用于渲染简单的3D对象和管理视图截头,相机和变换矩阵.
这一切都很棒,但提供的抽象隐藏了低级细节,我很难移动到我无法使用的代码GLTools- 例如,pyopengl.我在网上看到的绝大多数教程都使用了立即模式,我试图避免这种模式.那些使用glDrawArrays使用的glEnableClientState,这我也想避免的.
我正在寻找的是完全符合OpenGL 3.x的入门教程.如果这个订单太高了,也许洗衣清单很好的"起点"功能将是有序的.
我已经谷歌搜索它,但没有准备好的脚本 - 而不是对Flash的相同效果.我已经检查了水效应解释的算法,并测试了Perlin噪声的实现,它可以很好地模拟平面上的波浪末端.我正在寻找基于鼠标悬停/悬停操作在几个Flash Effects上找到的相同实现.这是针对一个交互式楼层库,我很乐意远离Flash,特别是为了避免代码的这种简单的逆向工程 - 是的,我知道它可以只使用一些现成的flash代码,但我只会用它作为最后的手段.
有没有人为Pygame看过这种效果的合适实现(使用OpenGL与否)?
编辑: 任何人都可以使用OpenCV/OpenGL和Pygame提供这种效果的合适实现吗?
这里的罪魁祸首是(代码)接口传递一个值列表,这些值将通过Python从外部解释器(跟踪器 - 而不是TUIO)发送.我已经尝试了几天,但是Pygame无法像C/C++代码那样快速生成任何东西(用于OpenGL中的着色器),而且我对C/C++的了解也是空的.所以目标至少要来自Python代码.
一个很好的例子,与Flash效果不同,但仍然很好的是使用Java applet的Water Simulation.
(赏金显示答案没有足够的细节,因为这是最接近'OP无法创建他想要的代码,因为他缺乏基本技能,这个答案可能对几个人有用').
我想有一个没有窗口的OpenGL上下文(在带有Xorg和Windows的GNU/linux上).我不会去渲染什么,但只有通话功能一样glGetString,glCompileShader和类似的.
除了创建一个隐藏的窗口之外,我已经完成了一些有用的但没有任何有用的东西.这似乎是对我的黑客攻击.
那么有没有人有更好的想法(对于任何平台)?
编辑:使用Xorg,我能够创建并将OpenGL上下文附加到根窗口:
#include<stdio.h>
#include<stdlib.h>
#include<X11/X.h>
#include<X11/Xlib.h>
#include<GL/gl.h>
#include<GL/glx.h>
int main(int argc, const char* argv[]){
Display *dpy;
Window root;
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
XVisualInfo *vi;
GLXContext glc;
dpy = XOpenDisplay(NULL);
if ( !dpy ) {
printf("\n\tcannot connect to X server\n\n");
exit(0);
}
root = DefaultRootWindow(dpy);
vi = glXChooseVisual(dpy, 0, att);
if (!vi) {
printf("\n\tno appropriate visual found\n\n");
exit(0);
}
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
glXMakeCurrent(dpy, root, glc);
printf("vendor: …Run Code Online (Sandbox Code Playgroud) 我对使用以下方法生成/创建顶点数组对象(VAO)的观点感到困惑:
glGenVertexArrays(GLsizei n, GLuint *arrays);
Run Code Online (Sandbox Code Playgroud)
和
glBindVertexArray(GLuint);
Run Code Online (Sandbox Code Playgroud)
因为我仍然可以创建一个缓冲区对象,说了顶点,并描述了该缓冲区对象glVertexAttribPointer,并glEnableVertexAttribArray没有创造过一个VAO.
我的问题是,如果您不必实际创建VAO来描述缓冲区对象中的数据,那么为什么OpenGL SuperBible 5ed这样的源包含在创建VBO时创建VAO的调用?它们仅用于我尚未发现的更高级的主题,我完全糊涂了吗?
此外,我在VBO上阅读wikipedias条目时首次遇到这个问题,他们的示例代码不包含任何调用,glGenVertexArrays()但他们仍然用数据描述数据glVertexAttribPointer().Wiki VBO条目 -
出于什么原因创建VAO的示例?
有人能给我一个关于OpenGL和WebGL之间确切区别的简单答案吗?我需要更具体的以下内容:编程语义,API的继承,API的扩展等.
我查看了以下网站,但对我来说不是很清楚:http: //www.khronos.org/webgl/wiki/WebGL_and_OpenGL_Differences
我试图理解这两个,如何使用它们以及它们是如何相关的.假设我想创建一个简单的地形和一个纹理立方体.对于这两个对象,我有三角形顶点的数组,对于立方体,我有一个包含纹理数据的数组.我的问题是:如何使用VAO和VBO来创建和渲染这两个?
有许多教程和书籍,但我仍然不知道如何理解和使用这些概念.
我只是想在平面图像上尝试一些着色器.事实证明,编写一个C程序,它只是将图片作为纹理并应用,假设是高斯模糊,因为它上面的片段着色器并不那么容易:你必须初始化OpenGL,就像100行代码,然后了解GLBuffers等.另外要与窗口系统进行通信,必须使用另一个框架GLUT.
事实证明,Nvidia的Fx作曲家很适合使用着色器.但我仍然希望有一个简单的C或C++程序,它只是将给定的片段着色器应用于图像并显示结果.有人有例子还是有框架?
我正在研究渲染管道,当我到达剪辑阶段时,我们解释说,从视图(眼睛或相机)空间我们必须传递到剪辑空间,也称为规范化设备空间(NDC),即立方体空间从-1到1.
但是,现在我不明白从这个空间到屏幕坐标空间的通道何时发生:
剪切后和光栅化之前?
光栅化后和剪刀和z测试之前?
在写入帧缓冲区之前的最后?
我正在尝试向OpenGL glsl着色器发送一个布尔值.
目前我在着色器中有这个:
uniform bool foo;
Run Code Online (Sandbox Code Playgroud)
我用它来设置它:
glUniform1i(glGetUniformLocation(shader, "foo"), true);
Run Code Online (Sandbox Code Playgroud)
似乎没有glUniform1b,所以我将其设置为整数.这似乎工作正常.
这种方法有什么问题吗?它是便携式的,还是可以打破其他显卡/驱动程序?我目前正在使用OpenGL 4.3.