Questions tagged «shaders»

在图形硬件上运行的计算机程序,可高度控制场景的渲染方式

1
如何将物理从几何着色器整合到程序生成的世界中?
本质上,我想消除从CPU到GPU产生相干噪声的需要。从那里,我还想使用此噪声作为体素点的密度来生成三维世界的地形。在此之后,我想获取这些密度并将它们代表世界的地形多边形化(生成顶点)。 一切都很好。但是,我也想实时地动态改变世界。一旦达到这一点,尝试将顶点返回给CPU来执行诸如碰撞检测之类的事情,以及我想涉及CPU而不是GPU的所有游戏计算等问题。 所以问题是:如何将顶点的子集返回给CPU以处理冲突? 还有一个问题:是否有一种简单的方法来获取一组顶点并在GPU上从中生成索引? 对于这些不同的东西应该使用哪种着色器,我感到困惑。我听说有人使用像素着色器来收集密度,然后使用几何着色器来处理从顶点生成的地形,然后以某种方式合并顶点着色器来进行动态变形。 我正在使用C#4.0,.NET 4.0和XNA Game Studio 4.0。
10 c#  xna  shaders 

6
OpenGL ES 2.0:质量明暗器存储库[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 请问一个高品质的OpenGL(OpenGL ES 2.0)顶点和片段着色器存储库,请问一下。 我正在寻找基于像素的着色着色器(例如phong)和simmilar。很高兴看到它们更多,能够在质量与着色器性能之间进行选择。

1
如何反转背景像素的颜色
我正在使用Java和jMonkeyEngine编写游戏和地图编辑器。在地图编辑器中,我已通过线框球体完成了笔刷。我的问题是:我想使它在任何地方都可见,因此我想反转此笔刷“后面”的像素的颜色。我想用片段着色器(GLSL)来做,但是我不知道如何获得该像素的颜色。

2
更新着色器制服的最佳方法是什么?
使着色器矩阵保持最新状态的最常用方法是什么?为什么? 例如,目前我有一个Shader类,用于存储GLSL着色器程序和统一体的句柄。每次移动摄像机时,我都必须将新的视图矩阵传递给着色器,然后我必须将每个不同的世界对象的模型矩阵传递给着色器。 这严重限制了我,因为如果不访问该着色器对象就无法执行任何操作。 我想到创建一个ShaderManager负责容纳所有活动着色器的单例类。然后,我可以从任何地方访问该对象,世界对象不必知道什么着色器处于活动状态,只需要ShaderManager知道所需的矩阵即可,但是我不确定这是最好的方法,并且可能存在一些问题将采取这种方法。
10 opengl  shaders  glsl 

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 


3
如何将多个矩阵发送到顶点着色器?
我正在使用骨骼/蒙皮练习动画。我正在尝试为着色器每个顶点发送一个矩阵。我可以想到这两种方法。 方法一 这样的每个骨基质都有一个统一的手柄 u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); 并在其中onDraw将它们每个发送到着色器: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); 如果我有大量矩阵,显然这不是一个好方法。我的第二个想法我还没有尝试过,因为有很多代码可以重构 方法2 是用来glUniformMatrix4fv一次将它们全部发送出去(假设我有20个矩阵) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); 哪里matrices是float[16 * 20]。但是,然后修改每个骨骼的矩阵变得有点乏味。例如,如果我想获得第3个矩阵,则需要 float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); 而保存这些值可能会变得更加烦人。 我现在正在使用方法1,但看起来并不十分聪明... 将多个矩阵发送到OpenGL ES 2着色器的最佳方法是什么? LE:我正在使用Android,因此我正在寻找Java解决方案。


1
2D水顶面轮廓
我正在尝试使用顶点片段着色器创建水表面厚度的效果。 我在3D游戏环境中,但是它是滚动视图,所以是“ 2D”视图。 这是一个使用片段着色器在真实2D中创建这种效果的很好的教程。 但是我认为这不能用于我的情况。目前,我只有一架飞机要折射。 我想应用水厚效果。但是我不知道该怎么做。 我暂时不尝试使用顶点创建一些水变形/位移,这不是重点。 我不知道是否可以使用简单的四边形,也许我应该使用这样的对象。 这里有些例子。 我对如何产生这种效果一无所知。 非常感谢 ! [ 编辑 ]添加了雷曼水效果以更好地参考效果。

1
优化重型片段着色器的性能
我需要帮助优化以下一组着色器: 顶点: precision mediump float; uniform vec2 rubyTextureSize; attribute vec4 vPosition; attribute vec2 a_TexCoordinate; varying vec2 tc; void main() { gl_Position = vPosition; tc = a_TexCoordinate; } 分段: precision mediump float; /* Uniforms - rubyTexture: texture sampler - rubyTextureSize: size of the texture before rendering */ uniform sampler2D rubyTexture; uniform …

1
gluLookAt如何工作?
据我了解, gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 等效于: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); 但是当我打印出ModelView矩阵时,对的调用glTranslatef()似乎无法正常工作。这是代码片段: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

2
处理场景中的许多灯光(带有着色器)
我很好奇如何处理场景中的许多灯光。给定角色扮演游戏中非常大的地图,其中包括地牢(其中有灯光)等。我知道延迟照明,但这只能回答如何渲染许多灯光。但是我的问题更多:如何不渲染很多灯光。仅渲染影响场景的灯光显然是可取的,但是我不知道将其存档的技术/算法。没有人希望甚至能够渲染500个点光源,仅仅是因为地图上的某个地方。但是,人们不能只是从灯光到玩家的直线,并测试两者之间是否有直线。距离似乎也不是一个好的指标。(阳光?) tl; dr:如何找出仅影响渲染的灯光会影响场景?

4
使用全屏四边形对渲染目标进行完美像素渲染
将一堆值渲染到rendertarget时遇到一些麻烦。这些值永远不会在我想要它们的确切范围内。基本上,我使用全屏四边形和像素着色器渲染到我的rendertarget纹理,然后打算将纹理坐标用作着色器中某些计算的基础。四边形的纹理坐标范围从左上角的(0,0)到右下角的(1,1)...问题是,插值后,这些值没有像这样到达像素着色器。 一个示例: 我渲染为4x4纹理,在这种情况下,着色器仅在红色和绿色通道中输出纹理坐标(u,v): return float4(texCoord.rg, 0, 1); 我要摆脱的是一种纹理,其中左上角的像素是RGB(0,0,0),因此是黑色,右上角的像素是RGB(255,0,0),因此是明亮的红色,左下角的像素为RGB(0,255,0)-亮绿色。 但是,相反,我在这里得到此: (直四边形渲染,无校正) 左上方的像素是黑色,但在其他角落我只能得到相对深红色和深绿色。它们的RGB值为(191,0,0)和(0,191,0)。我强烈怀疑它与四边形的采样位置有关:左上像素正确地对四边形的左上角进行采样,并获得(0,0)作为UV坐标,但其他角点像素未从中采样四边形的其他角。我已经在左图中说明了这一点,蓝色框代表四边形,白色点代表上采样坐标。 现在,我知道在Direct3D9中渲染屏幕对齐的四边形时应将半像素偏移应用于坐标。让我们看看我从中得到什么样的结果: (以DX9的半像素偏移量渲染的四进制) 红色和绿色变亮,但仍然不正确:223是我在红色或绿色通道上获得的最大值。但是现在,我什至没有纯黑色,而是带有RGB(32,32,0)的深黄灰色! 我真正需要的是这种渲染: (目标渲染,减小的四边形尺寸) 与第一个图形相比,看起来我必须将四边形的右边界和底边界恰好向左移动一个像素。然后,像素的右列和底行都应正确地从四边形的边界正确获取UV坐标: VertexPositionTexture[] quad = new VertexPositionTexture[] { new VertexPositionTexture(new Vector3(-1.0f, 1.0f, 1f), new Vector2(0,0)), new VertexPositionTexture(new Vector3(1.0f - pixelSize.X, 1.0f, 1f), new Vector2(1,0)), new VertexPositionTexture(new Vector3(-1.0f, -1.0f + pixelSize.Y, 1f), new Vector2(0,1)), new VertexPositionTexture(new …

3
延迟阴影-如何合并多个灯光?
我从GLSL开始,已经实现了简单的延迟着色,该着色输出带有位置,法线和反照率的G缓冲区。 我还编写了一个简单的点光源着色器。 现在,我为点光源绘制一个球体,输出进入照明缓冲区。 问题是,绘制多个灯光时如何合并灯光缓冲区的结果? 例如,当我使用点光源着色器将第二个光源绘制到光缓冲区时,如何将第一个光源添加到照明缓冲区中的第二个光源。我的意思是,您不能读取和写入相同的输出缓冲区吗?

1
关于图形编程的好书吗?
我一直在寻找一本采用自下而上的图形编程方法的书。因此,从2D过滤开始,可能是进入法线贴图,然后是环境光遮挡等。 我问是因为最近几年我在游戏开发方面一直很懒惰,并且一直使用能够处理此问题的引擎。我想开始为游戏编写一些着色器,而不是依靠过去借用的神秘着色器。我认为在这方面有很强的知识会有所帮助,而且我是一个自下而上的学习者,请帮助我! 我知道GPU Gems系列很棒,但是它们似乎更像是一本食谱,而不是我想要的自下而上的方法。您往往会从食谱中获得更多分散的理论,而不是基于前几章的理论。 编辑:最好是你读过的东西!我可以在亚马逊上搜索此内容,但是很难以这种方式进行公正的评论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.