Articles of 元素opentk

GLSL – std140均匀块 – 场(vec,float,mat4)总是0.0

好, 首先,如果只是使用制服,就应该这样做。 切换到统一块没有任何变化,因为所有的值都是0.0。 我在顶点着色器中用各种if-then-else的东西testing了这个,并修改了输出的颜色。 根据CodeXL 1.3(这里的数据被列为VBO,但我认为这只是表面化),GL.BindBuffer与GL.MapBuffer,或GL.GetBufferSubData真的是我的ubo内的正确的数据,但仍然在统一块着色器仅包含0.0。 工作stream程: //Create UBO BufferUBOName = new int[2]; GL.GenBuffers(2, BufferUBOName); // Generate the buffer BufferIndex = 0; GL.BindBuffer(BufferTarget.UniformBuffer, BufferUBOName[0]); // Bind the buffer for writing GL.BufferData(BufferTarget.UniformBuffer, (IntPtr)uboWorldData.SizeInBytes, IntPtr.Zero, BufferUsageHint.StreamDraw); // Request the memory to be allocated GL.BindBufferRange(BufferRangeTarget.UniformBuffer, BufferIndex, BufferUBOName[0], IntPtr.Zero, (IntPtr)uboWorldData.SizeInBytes); // Bind the created Uniform Buffer to the Buffer […]

OpenGL – 计算相机视图matrix

问题 我正在计算模型,视图和投影matrix独立地在我的着色器中使用如下: gl_Position = projection * view * model * vec4(in_Position, 1.0); 当我尝试计算我的相机的视图matrix时,Z轴被翻转,我的相机看起来像在向后看。 我的程序是用C#使用OpenTK库编写的。 翻译(工作) 我创建了一个testing场景如下: 从我对OpenGL坐标系的理解中,他们被正确定位。 模型matrix使用以下方法创建: Matrix4 translation = Matrix4.CreateTranslation(modelPosition); Matrix4 model = translation; 视图matrix是使用以下命令创建的 Matrix4 translation = Matrix4.CreateTranslation(-cameraPosition); Matrix4 view = translation; 旋转(不工作) 我现在想创建相机的旋转matrix。 要做到这一点,我使用相机的权利,向上和向前的向量: // Hard coded example orientation: // Normally calculated from up and forward // Similar to look-at camera. […]

OpenGL为什么点的大小保持不变,而放大/缩小

我目前正在为一所大学的项目开发游戏引擎。 在实现一些debugging工具时,我遇到了一个小问题。 当我在ModelViewmatrix上绘制点时,点的厚度不会与其他对象保持一致。 这是我如何绘制一个点 public static void DrawPoint(Vector3 p1,float size,Color color) { GL.Disable(EnableCap.Texture2D); GL.PointSize(size); GL.Begin(BeginMode.Points); GL.Color3(color); GL.Vertex3(p1.X, p1.Y, p1.Z); GL.End(); }); 这是我的绘画循环 protected sealed override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(ref _Camera.CameraMatrix); GL.PushMatrix(); RenderGame(); //<– Where I render world object GL.Clear(ClearBufferMask.DepthBufferBit); GL.LoadIdentity(); GL.MatrixMode(MatrixMode.Projection); GL.PushMatrix(); GL.LoadIdentity(); GL.Ortho(0, Width, 0, Height, -1, 1); […]

法线旋转不正确

在渲染一个立方体到gbuffer(漫射,正常,深度)时,我注意到一些古怪的应用旋转。 我为这个魔方建立了一个世界matrix如下: Yaw = Yaw % MathUtil.PI2; Pitch = Pitch % MathUtil.PI2; Roll = Roll % MathUtil.PI2; Matrix4 s = Matrix4.Scale(Scale); Matrix4 t = Matrix4.CreateTranslation(Position); Matrix4 rotY = Matrix4.CreateRotationY(Yaw); Matrix4 rotX = Matrix4.CreateRotationX(Pitch); Matrix4 rotZ = Matrix4.CreateRotationZ(Roll); return s * rotY * rotX * rotZ * t; 如果我使用比例1,位置0,0,0渲染立方体,并且没有旋转,我的法线被正确渲染。 应用比例/位置不会改变这个事实。 但是,当我应用旋转的时候,法线在某些情况下会搞砸。 这些设置没有错: 偏航= Pi / 2 […]

OpenGL的UseProgram()失败

我在使用Linux上的GL.UseProgram() Mono 3.2.8的ArchLinux)和GL.UseProgram()应用程序上有一个相当奇怪的例外。 我写了一个类将多个文件合并到一个程序中: public sealed class Shader : IContent { public string Name { get { return name; } } readonly string name; readonly ShaderElement[] elements; int programId; public Shader(string name, params ShaderElement[] elements) { this.name = name; this.elements = elements; this.programId = -1; } public void Compile() { programId = GL.CreateProgram(); for (int […]

用OpenGL VBO在obj模型中绘制错误的面

我试图从一个.obj文件中绘制一个3D模型,遇到了很大的麻烦。 我认为我的模型画的是错误的面孔,但我不明白为什么。 原厂型号: 这是我读取模型的代码: using (StreamReader streamReader = new StreamReader("Content/Models/" + path)) { while (!streamReader.EndOfStream) { List<string> words = new List<string>(streamReader.ReadLine().ToLower().Split(' ')); words.RemoveAll(s => s == string.Empty); if (words.Count == 0) continue; string type = words[0]; words.RemoveAt(0); switch (type) { // vertex case "v": vertices.Add(new Vector4(float.Parse(words[0], new CultureInfo("en-US").NumberFormat), float.Parse(words[1], new CultureInfo("en-US").NumberFormat), float.Parse(words[2], new CultureInfo("en-US").NumberFormat), words.Count […]

如何使用texelFetch

我试图从我的着色器中使用GLSL texture()函数切换到使用texelFetch()因为我想纹理像素(无平滑)的处理很less,我想使用像素坐标,而不是标准化的坐标。 我对GLSL相当陌生,所以我介绍了一个教程,帮助我得到了下面的代码,这些代码是在Visual Studio 2015的C#中的基于OpenTK的应用程序中工作的(表单上有一个OpenTK.GLControl控件, display ,这在这个代码中没有显示)。 我想把所有的代码都放在一个地方,所以我把它放在一个文件里,我可以把所有的东西都包括在内。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private const TextureTarget texTarget = TextureTarget.Texture2D; private void display_Click(object sender, EventArgs e) { VertexBuffer<ColoredVertex> vb = new VertexBuffer<ColoredVertex>(ColoredVertex.Size); vb.AddVertex(new ColoredVertex(new Vector2() { X = 0, Y = 0 }, new Vector2() { X = 1f/4f, […]

OpenTK地形 – 三角带问题

我目前正在尝试在OpenGL应用程序中渲染地形(使用C#中的OpenTK)。 事情真的很奇怪,我不知道为什么。 这里是我用来从一个heightmap加载我的terrain的代码(是的,我知道设置索引,我现在的方式是愚蠢的,但它只是所以我可以使用我所做的网格渲染类)。 我使用Triangle Strips渲染地形。 public Terrain(string heightmapFile) { if (!File.Exists(heightmapFile)) throw new FileNotFoundException("File not found at path '" + heightmapFile + "'"); using (var bitmap = new Bitmap(heightmapFile)) { var vertices = new List<Vertex>(); var indices = new List<int>(); int index = 0; for (int y = 0; y < bitmap.Height – 1; y++) […]

如何在OpenTK中启用FSAA?

我所能find的就是这个问题 ,但GraphicsMode本身并不支持消除锯齿: using System.Drawing; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; class Program { static void Main() { using (var window = new GameWindow(800, 60, new GraphicsMode(32, 24, 0, 8))) { window.Resize += (sender, e) => { GL.Viewport(window.Size); }; window.RenderFrame += (sender, e) => { GL.Clear(ClearBufferMask.ColorBufferBit); GL.Color3(Color.Red); GL.Begin(PrimitiveType.Triangles); GL.Vertex2(-1, 1); GL.Vertex2(-1, 0); GL.Vertex2(1, 0); GL.End(); window.SwapBuffers(); […]

在模型中缺less三角形

我有一个模型中的三角形没有显示的问题。 左边是线框,右边是完成的图像。 出于某种原因,一堆三角形没有被显示出来。 该项目是在C#中,使用OpenGL(OpenTK)。 我会提供更多的信息,如果需要(如代码),但有很多的代码,所以我宁愿检查是否有人有一个简单的解决scheme…请评论,如果你需要更多的信息,虽然。 编辑:这是缓冲区代码,如果有帮助… public void LoadBuffers(MeshData m, out uint indexBuffer, out uint dataBuffer, out int vertOffset, out int normOffset, out int texcoordOffset) { float[] verts, norms, texcoords; uint[] indices; m.OpenGLArrays(out verts, out norms, out texcoords, out indices); GL.GenBuffers(1, out dataBuffer); GL.GenBuffers(1, out indexBuffer); int buffersize = (verts.Length + norms.Length + texcoords.Length); float[] […]