标签: opengl

为什么OpenGL使用度而不是弧度?

OpenGL设计师从不害怕数学,线性代数的知识对于除最简单的OpenGL应用之外的所有人都是必不可少的.我认为可以安全地假设OpenGL程序员熟悉弧度角度.

在数学上,弧度在各个方面都比度数更优雅.它们还具有实际优势:

  • C标准库使用弧度.
  • 几乎任何其他图书馆都使用弧度.
  • 在一些计算中,弧度更方便,例如圆弧的长度.

那么,为什么OpenGL设计者决定指定像glRotatefgluPerspective使用度数这样的函数呢?

(我知道它没有实际意义,反正也不会改变.我只是好奇,我在OpenGL.org上找不到答案.)

opengl angle degrees radians

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

如何获取GL库/标题?

#include <gl\gl.h> 
#include <gl\glu.h> 
#include <gl\glaux.h>
Run Code Online (Sandbox Code Playgroud)

这是一个例子,但在哪里获得GL标题?

c++ opengl

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

创建GLSL阵列的制服?

我想留下OpenGL的灯光,然后自己做.我希望我的着色器允许可变数量的灯光.

我们可以在GLSL着色器中声明一组制服吗?如果是这样,我们如何设定这些制服的价值?

arrays opengl shader glsl

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

GL_QUADS有什么不好的?

我听说GL_QUADS将在OpenGL版本> 3.0中删除,为什么会这样?我的旧程序将来不会有用吗?我已经进行了基准测试,GL_TRIANGLES或者GL_QUADS在渲染速度方面没有差异(甚至可能GL_QUADS更快).那么重点是什么?

opengl deprecated

63
推荐指数
3
解决办法
5万
查看次数

调试OpenGL的最佳方法是什么?

我发现很多时候,OpenGL会通过不绘制任何东西来告诉你失败.我正试图通过检查转换矩阵堆栈等来找到调试OpenGL程序的方法.调试OpenGL的最佳方法是什么?如果代码外观和感觉顶点位于正确的位置,您如何确定它们是什么?

opengl debugging

62
推荐指数
5
解决办法
3万
查看次数

opengl纹理坐标如何工作?

我知道在每次调用glVertex之前我必须调用以下其中一个:

glTexCoord(0,0); 
glTexCoord(0,1); 
glTexCoord(1,1); 
glTexCoord(1,0); 
Run Code Online (Sandbox Code Playgroud)

但我不知道他们的意思.但是,我知道,如果我乘以(或者是那个除法?)右侧(或者它是所有的?)两个,我的纹理会扩展,如果我相反,我的纹理会重复两次.我已经设法通过应用操作来编码纹理图集,直到它工作.但我对正在发生的事情有充分的了解.为什么划分它们会影响图像,为什么反转它们会反映它?纹理坐标如何工作?

opengl

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

OpenCL和OpenGL的计算着色器有什么区别?

我知道OpenCL可以控制GPU的内存架构,因此可以实现更好的优化,但是,除此之外,我们可以使用Compute Shaders进行矢量运算(加法,乘法,反演等)吗?

opengl gpgpu opencl compute-shader

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

使用OpenGL(和OpenGL ES)渲染SVG

我目前正在研究使用OpenGL和OpenGL ES从SVG文件渲染矢量图形的可能性.我打算以Windows和Android为目标.我理想的解决方案是拥有一个最小的C库,从给定的SVG文件生成多边形三角剖分.然后,这将生成标准的OpenGL或OpenGL ES调用,并在重绘时使用显示列表或vbo进行优化.我只需绘制一个显示列表,在翻译和旋转后绘制矢量图像,允许我将其与其他OpenGL调用混合.

到目前为止,我看到建议首先使用QT或开罗. - 这不是一个选项,因为我希望在没有膨胀库的情况下管理我自己的OpenGL上下文(在我想要实现的内容中).这也不适合Android.

第二个选项是使用渲染到纹理的库.虽然这可能适用于静态矢量图形,但对于经常进行缩放和旋转的游戏来说,它不是一种有效或可行的选择.

第三,有可能使用OpenVG.OpenVG规范(ShivaVG等)有一些开源实现,但我还没有找到一个能够在运行时从给定的SVG文件生成适当的OpenVG调用的库,我无法看到如何优化它我们可能希望使用显示列表或vbo.

这三种方法都受到限制.我认为最有希望的选择是在没有其他解决方案的情况下使用OpenVG实现.所以我的问题是,是否有任何图书馆可以做我想要的,或接近我想要的?如果没有,有什么理由不是吗?尝试从头开始这样做会更好吗?

opengl svg android opengl-es vector-graphics

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

为什么要使用十六进制常量?

有时我看到以十六进制定义的整数常量,而不是十进制数.这是我从GL10课程中获得的一小部分:

public static final int GL_STACK_UNDERFLOW = 0x0504;
public static final int GL_OUT_OF_MEMORY = 0x0505;
public static final int GL_EXP = 0x0800;
public static final int GL_EXP2 = 0x0801;
public static final int GL_FOG_DENSITY = 0x0B62;
public static final int GL_FOG_START = 0x0B63;
public static final int GL_FOG_END = 0x0B64;
public static final int GL_FOG_MODE = 0x0B65;
Run Code Online (Sandbox Code Playgroud)

这显然更简单的定义2914来代替0x0B62,所以有可能有些性能提升?我认为不这么认为,从那时起编译器应该改变它.

java opengl hex decimal

55
推荐指数
6
解决办法
3万
查看次数

与OpenGL TextureSampling相比,糟糕的OpenCL ImageSampling性能

我最近将我的volumeraycaster从OpenGL移植到OpenCL,这使得raycaster的性能降低了大约90%.我跟踪了OpenCL的图像采样功能的性能下降,这比相应的OpenGL纹理采样功能慢得多.通过删除图像采样功能和纹理采样功能,两个raycaster实现具有大致相同的速度.为了轻松地在不同的硬件上使用功能,并在其余的RT代码中排除一些愚蠢的错误,我写了一个小的基准测试,将OpenCL采样速度与OpenGL采样速度进行比较,并在不同的机器上进行测试但是OpenCL仍然只占OpenGL性能的10%左右.

基准测试的OpenCL HostCode(至少是其中最重要的部分):

void OGLWidget::OCLImageSampleTest()
{
    try
    {
    int size=8;
    float Values[4*size*size*size];
    cl::Kernel kernel=cl::Kernel(program,"ImageSampleTest",NULL);
    cl::ImageFormat FormatA(CL_RGBA,CL_FLOAT);
    cl::Image3D CLImage(CLcontext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR ,FormatA,size,size,size,0,0,Values,NULL);


    cl::ImageFormat FormatB(CL_RGBA,CL_UNSIGNED_INT8);
    cl::Image2D TempImage(CLcontext, CL_MEM_WRITE_ONLY,FormatB,1024,1024,0,NULL,NULL );


    kernel.setArg(0, CLImage);
    kernel.setArg(1, TempImage);



    cl::Sampler Samp;
    Samp() = clCreateSampler( CLcontext(), CL_TRUE, CL_ADDRESS_REPEAT, CL_FILTER_LINEAR, NULL);
    kernel.setArg(2, Samp);

    QTime BenchmarkTimer=QTime();
    BenchmarkTimer.start();

    cl::KernelFunctor func = kernel.bind(queue, cl::NDRange(1024,1024), cl::NDRange(32,32));
    func().wait();

    int Duration =  BenchmarkTimer.elapsed();
    printf("OCLImageSampleTest: %d ms \n", Duration);
    }
    catch (cl::Error& err)
      {
        std::cerr << "An OpenCL error occured, " << err.what()
                  << "\nError num …
Run Code Online (Sandbox Code Playgroud)

opengl textures image opencl sampling

54
推荐指数
1
解决办法
2415
查看次数