小编use*_*111的帖子

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

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

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万
查看次数

是否有可能在java中有一个未签名的ByteBuffer?

主题说明了一切.我正在使用OpenGL和OpenCL,如果我可以使用无符号的ByteBuffer来存储数据,那么会让生活更轻松.

java

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

轻松的脑力劳动者,更好的算法

这是在社区大学.我失败了,但想知道答案.

问题是这样的:你有一个代表图像的2D结构阵列.每个结构都有一个红色,绿色,蓝色和alpha值.可以有更多信息,但不是解决问题所必需的.

假设图像是4000x4000或1600万个元素.每个角落都需要更新/检查每个元素.

对于您需要的每个元素:

  • 如果<50或将设置为205> 205,则将红色字节设置为50
  • 使用rand()将绿色字节设置为0到255之间的随机值
  • 以"有趣"的方式修改蓝色.

"你不能蛮力,以更聪明的方式思考;你需要一个更好的算法"

我基本上做了一个循环.我是最快的,但他说这是"关于找到一个更好的算法,而不是使用可爱的编译器和指针技巧".

还需要在纯C中.没有OpenMP/Threads或OpenGL着色,OpenCL等......只有带有标准库的ANSI C(甚至禁止使用GNU/POSIX库).

我询问了按位操作,他说"那些在C [??]中非常昂贵,它是关于编写一个快速而可靠的算法,而不是你不断提出的这些可爱的技巧".

那有什么提示吗?

c algorithm

15
推荐指数
3
解决办法
769
查看次数

SDL GUI库?

有人知道一个有标准小部件的好的SDL GUI库吗?它们中有很多都出现在谷歌中,但大多数看起来都像是在1992年才出现.

c++ user-interface sdl

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

对象管理器?设计模式

我有很多需要传递给其他对象的对象.这是一个游戏,因此玩家需要了解世界,世界需要了解地图等.

我想要创建一个"Master"对象管理器,然后用它来注册这些对象,而不是传递所有这些.我会传递主对象管理器,所有需要的东西都可以做一个"masterObject.getPlayer()"或其他什么.

这是一个真正的设计模式吗?如果是这样,它叫什么?任何缺点.

java oop

7
推荐指数
2
解决办法
8998
查看次数

C没有布尔?还VS2010的问题

我正在使用VS 2010专业版.

首先,C没有bool类型?我只需要使用0/1的int.似乎很奇怪,因为大多数语言认为布尔是一种标准类型.

我也有Visual Studio 2010 Pro,但没有"C项目".我刚刚创建了一个Empty C++ Project.文件名以.c结尾

这个问题是关键字搞砸了(在编辑器中显示bool为高亮/有效,但编译器不喜欢它).

我去修复/添加组件,他们有C#,F#,C++,Visual Basic; 但没有C?

c visual-studio

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

GPU编程

我想做一些GPU编程.怎么去这里?我想学习一些"开放",跨平台和"更高"的语言.我不想只是锁定GPU供应商,也不想锁定OS,平台等.

我在这里有什么选择?Cuda,OpenCL,OpenMP,其他?他们的利弊是什么?

那么G/HLSL和PhysX呢?

我正在考虑做"通用"编程,一些数学,数字运算,模拟等.也许吐出一些漂亮的图形,但不是专门的图形编程.

gpu openmp opencl

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

GCC,链接库,找不到?

  • 操作系统:Windows 7 Pro X64
  • IDE:面向C/C++开发人员的Eclipse IDE
  • 编译器:MinGW(最新,4.5.2)

编译HelloWorld.c有效; 但是当我尝试添加一些外部库时,它会窒息.

我将.a和.dll文件添加到我的'Libraries'中; 将两者的路径添加到PATH和库路径.我还放了包含文件并配置了Include.据说我拥有的图书馆与win/mingw兼容.他们也为MSVC提供了不同的下载功能.

令人沮丧.ld.exe提供完整路径,显然在那里,我有权读/写它们.我也没有路径包含它们(它们在库路径和路径中).

我不明白为什么这不起作用.

c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-lC:\ rhino\data\lib\glfw.dll c:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:找不到-lC:\rhino\data\lib\libglfwdll.ac:/ mingw/bin /../ lib/gcc/mingw32/4.5.2 /../../../../ mingw32/bin/ld.exe:不能find -lC:\ rhino\data\lib\libglfw.a

C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a
04/15/2011  05:24 PM            70,384 libglfw.a
Run Code Online (Sandbox Code Playgroud)

更新:

我甚至将它们添加到我的C:\ MinGW\lib路径中,它仍然无法找到它们.

c gcc mingw

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

理解用于使用三角形在OpenGL 3.3+核心中绘制四边形的代码

我正在尝试使用OpenGL 3.x +为背景(2D)绘制四边形.不推荐使用四边形,因此目标是使用两个三角形来制作填充屏幕的矩形.这是有效的,但我不是100%清楚这里的一切.

  1. 建立

    GLuint positionBufferObject;
    GLfloat vertexPositions[] =
    {
        -1.0f, -1.0f, 0.0f, 1.0f,
        -1.0f,  1.0f, 0.0f, 1.0f,
         1.0f,  1.0f, 0.0f, 1.0f,
         1.0f, -1.0f, 0.0f, 1.0f,
        -1.0f, -1.0f, 0.0f, 1.0f,
    };
    glGenBuffers(1, &positionBufferObject);
    glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
    
    Run Code Online (Sandbox Code Playgroud)
    • 我明白了vertexPositions,这是一个顶点数组.
    • glGenBuffers()是说,我想要1个缓冲区并分配id &positionBufferObject
    • glBufferData()上传vertexPositions到GPU的内存; 但是由于我没有给它一个ID,它怎么知道上传呢?
  2. glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);
    glDisableVertexAttribArray(0);
    
    Run Code Online (Sandbox Code Playgroud)
    • glEnableVertexAttribArray() 只是说我要用数组0绘图?
    • glDrawArrays() - 如果我想绘制两个顶点数组怎么办?它是如何知道要渲染的?它知道从上面的命令?
    • 不确定是什么glVertexAttribPointer()
    • glDrawArrays() 清楚了.
  3. 清理,我觉得这是对的吗?

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glDeleteBuffers(1, &positionBufferObject);
    
    Run Code Online (Sandbox Code Playgroud)

    我只进行一次安装/清理.

奖励积分: …

c c++ opengl opengl-3

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

大双打/漂浮/数字

假设我有一个巨大的浮动数字,比如一万亿个小数位.很明显长双不能保持这一点.我们还假设我有一台拥有足够内存的计算机来容纳它.你怎么做这样的事情?

c c++ math numbers

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

标签 统计

c ×5

c++ ×3

java ×2

opengl ×2

algorithm ×1

gcc ×1

glsl ×1

gpu ×1

math ×1

mingw ×1

numbers ×1

oop ×1

opencl ×1

opengl-3 ×1

openmp ×1

sdl ×1

user-interface ×1

visual-studio ×1