标签: opengl

如何在C++中使用GLUT/OpenGL绘制文本?

如何使用GLUT/OpenGL绘图功能在屏幕上绘制文本字符串?

c++ opengl text glut

23
推荐指数
3
解决办法
8万
查看次数

使用哪个版本的OpenGL?

我目前运行的机器允许我在OpenGL 2.1中编程.如果我要制作一个程序,我应该使用当前OpenGL版本的强大功能,如3.x/4.x或使用2.1吗?

关于一个问题:我怎么知道我的计算机可以运行的OpenGL的最高版本是什么?

另一方面问题:升级我的视频卡是否允许我在升级版的OpenGL中编程?

c++ opengl version

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

纹理与GLSL中的texture2D

当在GLSL(a uniform sampler2D)中对2D纹理进行采样时,使用该texture函数并且从采样器推断尺寸(在这种情况下为2D).这是从1.30开始在GLSL中采样纹理的现代方法(GLSL参考页).但是,您也可以使用该texture2D功能.

texture2D函数是否已弃用,如果是这样,是否会texture2D在某些版本的GLSL中删除(或已删除)该函数的支持?

opengl glsl

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

PyOpenGL - 将转换矩阵传递到着色器

我无法将投影和模型视图矩阵从我的PyOpenGL代码传递到GLSL着色器中.我的理解是OpenGL矩阵是列专业,但是当我传递投影和模型视图矩阵时,我看不到任何东西.我尝试了矩阵的转置,它适用于模型视图矩阵,但投影矩阵无论如何都不起作用.这是代码:

import OpenGL
from OpenGL.GL import *
from OpenGL.GL.shaders import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from OpenGL.GLUT.freeglut import *
from OpenGL.arrays import vbo
import numpy, math, sys 

strVS = """
attribute vec3 aVert;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform vec4 uColor;
varying vec4 vCol;

void main() {
  // option #1 - fails
  gl_Position = uPMatrix * uMVMatrix * vec4(aVert, 1.0); 
  // option #2 - works
  gl_Position = vec4(aVert, 1.0); 
  // set color
  vCol = vec4(uColor.rgb, …

python opengl

23
推荐指数
0
解决办法
4848
查看次数

在OpenGL中glActiveTexture和GL_TEXTURE0的功能是什么?

我找到了一种理解为什么glActiveTexture需要的方法.我有以下代码:

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
Run Code Online (Sandbox Code Playgroud)

如果我想象这GL_TEXTURE_2D是挂在墙上的图片框架并且textureId是真实的图片,那么glBindTexture它是唯一一个将真实图片分配给框架的命令,那么,什么是GL_TEXTURE0glActiveTexture

我的代码可以正常工作吗?

glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);

glActiveTexture(GL_TEXTURE1);
glTexImage2D(GL_TEXTURE_2D, .....)
glTexParameteri(GL_TEXTURE_2D, ...)
Run Code Online (Sandbox Code Playgroud)

我目前正在使用OpenGL2.1.

opengl opengl-es

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

如何从头开始用人类可读的角度组成旋转矩阵?

总是阻碍我做3D编程的一件事是无法理解数学是如何工作的.我可以使用方法和函数在编程流程中使用数学,然后它对我来说都是清晰和合乎逻辑的,但在数学符号中,我无法从它做出正面或反面.

我一直在阅读网站,观看研究所试图解释这个问题的视频,但他们都使用数学符号,我只是迷失在其中,我的思想不会将其转化为可理解的东西.我可能有缺陷.

另外,只是使用某人的代码不是我的兴趣,我想了解它背后的机制,逻辑.我很乐意使用其他人的代码,但我真的想了解它是如何工作的.

这个问题

你能用简单的术语向我解释没有数学符号,只是编程符号/函数/伪代码,如何沿所有3轴实现矩阵变换?

理想情况下我想要的是编写方法/对象的材料/理解,我可以在其中定义3个轴的角度,类似于glRotate,以旋转我所拥有的四边形/三角形的集合.(我正在尝试编写立方体形状的3D旋转而无需访问OpenGL函数来为我执行此操作,因为每次在显示列表中发生更改时,都会在一次绘制调用中完成.)

我做了什么?

我试图制作一个90度的变换函数来获得数学的悬念,但是在制作一个理论上最简单的矩阵时却完全失败了.你可以在http://jsfiddle.net/bLfg0tj8/5/看到我失败的尝试.

Vec3 = function(x,y,z) {
    this.x = x;
    this.y = y;
    this.z = z;
}
Matrix = function Matrix() {
    this.matrixPoints = new Array();    
    this.rotationPoint = new Vec3(0,0,0);
    this.rotationAngle = 90;
}
Matrix.prototype.addVector = function(vector) {
    this.matrixPoints.push(vector);
}
Matrix.prototype.setRotationPoint = function(vector) {
    this.rotationPoint = vector; 
}
Matrix.prototype.setRotationAngle = function(angle) {
    this.rotationAngle = angle;
}
Matrix.prototype.populate = function() {
    translateToOrigin =     [[1,0,0-this.rotationPoint.x],
                                  [0,1,0-this.rotationPoint.y],
                                  [0,0,0-this.rotationPoint.z]];
    rotationMatrix =         [[0,-1,0],
                                  [0,1,0],
                                  [0,0,1]];
    translateEnd …
Run Code Online (Sandbox Code Playgroud)

opengl math 3d matrix

23
推荐指数
1
解决办法
6941
查看次数

什么是依赖纹理读取?

我一直在阅读有关计算机图形学的论文,而且我经常遇到在着色器代码中查询纹理的上下文中使用的术语"依赖纹理读取"或"依赖纹理提取".什么是依赖纹理读取,这与"普通"纹理读取有什么区别?

opengl graphics

22
推荐指数
3
解决办法
7525
查看次数

OpenGL:glGetError()在调用glewInit()后返回无效的枚举

我使用GLEW和freeglut.出于某种原因,在调用glewInit()之后,glGetError()返回错误代码1280,即使使用glewExperimental = GL_FALSE也是如此.

我无法编译着色器,glGetProgramInfoLog()返回"在调用glLinkProgram()之前未成功编译顶点着色器.链接失败." 之前我能够编译着色器.

重新安装驱动程序没有帮助.

这是我的代码:

int main(int argc, char* argv[])
{
    GLenum GlewInitResult, res;

    InitWindow(argc, argv);

    res = glGetError(); // res = 0

    glewExperimental = GL_TRUE;
    GlewInitResult = glewInit();    

    fprintf(stdout, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); // "No error"
    res = glGetError(); // res = 1280

    glutMainLoop();

    exit(EXIT_SUCCESS);
}

void InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(4, 0);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
    GLUT_ACTION_GLUTMAINLOOP_RETURNS);

    glutInitWindowPosition(0, 0);
    glutInitWindowSize(CurrentWidth, CurrentHeight);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

    WindowHandle = glutCreateWindow(WINDOW_TITLE);

    GLenum errorCheckValue = glGetError();

    if (WindowHandle …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew freeglut

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

如果未绑定,是否在GLSL着色器中保留统一值?

我正在制作一个程序,它为不同的不同基元使用两个不同的着色器.我的问题是,如果我绑定一个程序,发送它统一变量,然后使用另一个着色器程序并回到第一个,传递的统一值是否仍然存在?这是一些伪代码:

glUseProgram(shader1);
glUniform(shader1,...);
//stuff

for(elements in a list) {
    if(element.type = 1) {
        glUseProgram(shader2);
        element.draw();
    } else {
        glUseProgram(shader1); //Here, do the uniforms from above remain, if shader2 was bound before?
        element.draw();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl

22
推荐指数
1
解决办法
5158
查看次数

矢量如何在着色器语言中成倍增加?

比如gl_FragColor = v1 * v2,我真的无法得到它是如何相乘的,似乎参考给出了向量乘法矩阵的解释.
PS:该类型的v1v2都是vec4.

opengl

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

标签 统计

opengl ×10

c++ ×4

glsl ×2

3d ×1

freeglut ×1

glew ×1

glut ×1

graphics ×1

math ×1

matrix ×1

opengl-es ×1

python ×1

text ×1

version ×1