标签: opengl

如何在OpenGL中使用alpha透明度?

这是我的代码:

void display(void);

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable( GL_BLEND );
    glutInitWindowSize(600,600);
    glutInitWindowPosition(200,50);
    glutCreateWindow("glut test");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPointSize(8);
    glBegin(GL_POINTS);
    glColor4f(.23,.78,.32,1.0);
    glVertex2f(0,0);
    glColor4f(.23,.78,.32,0.1);
    glVertex2f(0.1,0);
    glEnd();
    glFlush();
}
Run Code Online (Sandbox Code Playgroud)

问题是这两个点看起来是相同的(即使我将alpha设置为0).有没有我错过了启用alpha透明度?

c++ opengl transparency alpha

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

在OpenGL 3.x中使用索引顶点数组时,如何指定每面颜色?

我正在尝试使用8个顶点的数组和24(4 *6)个索引的索引数组渲染一个立方体到顶点数组中.但是如何在不使用弃用函数的情况下指定每个变量(如颜色和法线)?为此,我需要一组单独的索引,但是当我指定两个索引数组(GL_ELEMENT_ARRAY_BUFFERs)并将它们指向不同的着色器变量(两次调用glVertexAttribPointer)时出现问题,并且它不会呈现任何内容(但不会t报告任何错误 - 用glGetError检查).我是否必须为每个面使用不同的glDrawElements调用,颜色和法线加载到统一变量中?

为了澄清,当8个顶点中的每一个都是不同面的一部分并且需要不同的颜色和法线值时,就会出现问题.

opengl

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

在类中使用OpenGL glutDisplayFunc

我已经创建了一个C++类(myPixmap)来封装OpenGL GLUT工具包执行的工作.display()该类的成员函数包含设置GLUT所需的大部分代码.


void myPixmap::display()
{
    // open an OpenGL window if it hasn't already been opened
    if (!openedWindow)
    {
        // command-line arguments to appease glut
        char *argv[] = {"myPixmap"};
        int argc = 1;
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(640, 480);
        glutInitWindowPosition(30, 30);
        glutCreateWindow("Experiment");
        glutDisplayFunc(draw);
        glClearColor(0.9f, 0.9f, 0.9f, 0.0);
        glClear(GL_COLOR_BUFFER_BIT);
        glutMainLoop();

        openedWindow = true;
    }  
}
Run Code Online (Sandbox Code Playgroud)

传递给的显示函数glutDisplayFunc()是该类的另一个成员函数:


void myPixmap::draw(void)
{
    glDrawPixels( m,n,GL_RGB,GL_UNSIGNED_BYTE, pixel );
}
Run Code Online (Sandbox Code Playgroud)

但是,Mac OS X 10.6.4上的gcc 4.2.1拒绝编译此代码,声称:

argument of type 'void (myPixmap::)()' …

c++ opengl compiler-errors class

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

你如何在OpenGL中获得模型视图和投影矩阵?

我试图使用OpenGL着色语言(GLSL)1.5版来制作顶点和几何着色器.

我已经了解到在GLSL 1.5版中,gl_ModelViewProjectionMatrix不推荐使用内置变量,所以你必须手动传递它们.如果我已经设置了模型视图和投影矩阵(使用gluLookAtgluPerspective例如),那么如何让矩阵传递到顶点和几何着色器?我做了一些搜索,一些网站似乎提到了一个函数glGetMatrix(),但我在任何官方文档中找不到该函数,并且它似乎不存在于我正在使用的实现中(unknown identifier: glGetMatrix当我得到编译错误时)尝试用该函数编译它).

opengl glsl

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

我应该以什么顺序将我的顶点发送到OpenGL以进行剔除

我正在学习一个3D opengl的地方,而且相当不错,我现在有一个漂亮的相机和一些简单的立方体物体.目前正在使用顶点数组,但我在这里很快就交换到了VBO.我只是想尝试剔除,但是我不确定我应该指定我的顶点的顺序,现在这就是我正在做的事情:

void cube::update_verts(){
GLushort cur=0;

///back face
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z;

///right face
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;

///top face
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;

///front face
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y+sy; verts[cur++]=z+sz;
verts[cur++]=x; verts[cur++]=y+sy; verts[cur++]=z+sz;

///bottom face
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z;
verts[cur++]=x; verts[cur++]=y; verts[cur++]=z+sz;
verts[cur++]=x+sx; verts[cur++]=y; verts[cur++]=z+sz;

///left face
verts[cur++]=x; verts[cur++]=y+sy; …
Run Code Online (Sandbox Code Playgroud)

c++ opengl sdl

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

Point Sprites用于粒子系统

点精灵是构建粒子系统的最佳选择吗?

新版本的OpenGL和最新图形卡的驱动程序中是否存在点精灵?或者我应该使用vbo和glsl吗?

c c++ opengl glsl

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

如何在片段着色器中获取像素信息?

在我的片段着色器中,我可以加载纹理,然后执行以下操作:

uniform sampler2D tex;

void main(void) {
   vec4 color = texture2D(tex, gl_TexCoord[0].st);
   gl_FragColor = color;
}
Run Code Online (Sandbox Code Playgroud)

这将当前像素设置为纹理的颜色值.我可以修改这些等,它运作良好.

但是有几个问题.我如何判断"我"是哪个像素?例如,假设我想将像素100,100(x,y)设置为红色.其他一切都变黑了.我该怎么做:

"if currentSelf.Position()==(100,100); then color = red; else color = black?"

我知道如何设置颜色,但我如何获得"我的"位置?

其次,如何从邻居像素获取值?

我试过这个:

vec4 nextColor = texture2D(tex, gl_TexCoord[1].st);
Run Code Online (Sandbox Code Playgroud)

但不清楚它的回归是什么?如果我像素100,100; 如何从101,100或100,101获取值?

opengl glsl

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

我是否必须将OpenGL数据类型(GLint,CLchar,...)用于跨平台游戏?

我有一个简短的问题.为什么OpenGL为标准类型(如int,unsigned int,char等)提供了自己的数据类型?我是否必须使用它们而不是使用C++数据类型构建?

例如OpenGL的相当于unsigned intGLuint和交流串有GLchar*代替char*.

c++ opengl types cross-platform

26
推荐指数
2
解决办法
7126
查看次数

从OpenGL GLSL中的RGB到HSV

我需要从RGB颜色空间传递到HSV ..我在互联网上搜索并发现了两种不同的实现,但这些给了我不同的结果:

A:

precision mediump float;
 vec3 rgb2hsv(float r, float g, float b) {

     float h = 0.0;
     float s = 0.0;
     float v = 0.0;

     float min = min( min(r, g), b );
     float max = max( max(r, g), b );
     v = max;               // v

     float delta = max - min;

     if( max != 0.0 )
         s = delta / max;       // s
     else {
         // r = g = b = 0       // s = 0, v …
Run Code Online (Sandbox Code Playgroud)

opengl rgb glsl hsv

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

R中的Performant 2D OpenGL图形,使用qtpaint(qt)或rdyncall(SDL/OpenGL)软件包快速显示光栅图像?

对于我在R&Rcpp + OpenMP&Shiny中制作的实时交互式Mandelbrot查看器我正在寻找一种高性能的方式来显示1920x1080矩阵作为光栅图像,以期能够实现ca. 5-10 fps(计算Mandelbrot图像本身现在在中等变焦时达到约20-30 fps,当然滚动应该快速).使用image()with选项useRaster=TRUE,plot.raster或者甚至grid.raster()还没有完全削减它,所以我正在寻找更高性能的选项,理想情况下使用OpenGL加速.

我注意到有qt 包装器qtutilsqtpaint http://finzi.psych.upenn.edu/R/library/qtutils/html/sceneDevice.html 你可以在其中设置参数opengl=TRUEhttp://finzi.psych.upenn.edu/ R/library/qtpaint/html/qplotView.html 再次使用参数opengl=TRUEhttp://finzi.psych.upenn.edu/R/library/qtpaint/html/painting.html.

我还注意到应该能够使用rdyncall软件包调用SDL和GL/OpenGL函数(从https://cran.r-project.org/src/contrib/Archive/rdyncall/安装,从https://安装SDL)www.libsdl.org/download-1.2.php)`,演示可在http://hg.dyncall.org/pub/dyncall/bindings/file/87fd9f34eaa0/R/rdyncall/demo/00Index获得,例如http:// hg.dyncall.org/pub/dyncall/bindings/file/87fd9f34eaa0/R/rdyncall/demo/randomfield.R).

我是否正确使用这些软件包,应该能够使用opengl加速显示2D图像栅格?如果是这样,有没有人想过如何做到这一点(我问,因为我不是qtSDL/OpenGL的专家)?

非OpenGL选项的某些时间对我的应用来说太慢了:

# some example data & desired colour mapping of [0-1] ranged data matrix
library(RColorBrewer)
ncol=1080
cols=colorRampPalette(RColorBrewer::brewer.pal(11, "RdYlBu"))(ncol)
colfun=colorRamp(RColorBrewer::brewer.pal(11, "RdYlBu"))
col = rgb(colfun(seq(0,1, length.out …
Run Code Online (Sandbox Code Playgroud)

opengl graphics qt sdl r

26
推荐指数
1
解决办法
806
查看次数

标签 统计

opengl ×10

c++ ×5

glsl ×4

sdl ×2

alpha ×1

c ×1

class ×1

compiler-errors ×1

cross-platform ×1

graphics ×1

hsv ×1

qt ×1

r ×1

rgb ×1

transparency ×1

types ×1