我知道标准化设备坐标有点我知道当我在-1.0和1.0之间使用float时,我可以得到输出。
但是,当我想使用整数作为顶点的位置属性时,我无法获得任何渲染输出。我尝试在GL_INT
中使用GL_TRUE
和glVertexAttribPointer
,但它不起作用。
例如。
std::vector<GLint> vex =
{
0, 0, 0,
4, 5, 0
};
glBufferData(GL_ARRAY_BUFFER, vex.size() * sizeof(GLint), vex.data(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_INT, GL_TRUE, 3 * sizeof(GLint), (void*)0);
// in the render loop
glBindVertexArray(VAO);
glDrawArrays(GL_LINES, 0, 2);
我使用基本的顶点着色器如下:
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
我认为GL_TRUE
会将整数位置标准化为[-1.0,1.0]。
也许我忽略了一些重要的事情。那么如何正确使用整数坐标来渲染我的点?
关于glVertexAttribPointer()
我已阅读此reference,但仍无法得到我想要的内容。
答案 0 :(得分:3)
但是,当我想使用整数作为顶点的位置属性时,我无法获得任何渲染输出。
你没有输出,因为两点太靠近了。
有符号的归一化定点整数表示[-1,1]范围内的数字。 从带符号的归一化定点值c到相应的转换 使用
执行浮点值 f
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;
using System.Data.OleDb;
namespace ConsoleApplication31
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
const string DATABASE = @"c:\temp\test1.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement article = doc.Root;
XNamespace ns = article.GetDefaultNamespace();
XDocument docDatabase = XDocument.Load(DATABASE);
XElement rdf = docDatabase.Root;
XNamespace nsSkosxl = rdf.GetNamespaceOfPrefix("skosxl");
XNamespace nsRdf = rdf.GetNamespaceOfPrefix("rdf");
List<XElement> prefLabels = rdf.Descendants(nsSkosxl + "prefLabel").ToList();
Dictionary<string, List<string>> dictLabels = prefLabels.GroupBy(x => (string)x.Descendants(nsSkosxl + "literalForm").FirstOrDefault(), y => (string)y.Element(nsSkosxl + "Label").Attribute(nsRdf + "about"))
.ToDictionary(x => x.Key, y => y.ToList());
List<XElement> fundingSources = article.Descendants(ns + "funding-source").ToList();
foreach (XElement fundingSource in fundingSources)
{
XElement institutionWrap = fundingSource.Element(ns + "institution-wrap");
string institution = (string)fundingSource;
if (dictLabels.ContainsKey(institution))
{
institutionWrap.Add(new XElement("institution-id", new object[] {
new XAttribute("institution-id-type","fundref"),
dictLabels[institution]
}));
}
else
{
Console.WriteLine("Dictionary doesn't contain : '{0}'", institution);
}
}
Console.ReadLine();
}
}
}
(f = max( c / (2^(b-1) - 1), -1.0 )
是整数值,c
是整数数据格式中的位数)
这意味着,对于数据类型b
, 4 导致浮点 0.000000001862645 且 5 导致浮点结果为0.000000002328306
使用GLint
代替GLbyte
来测试您的代码。以下代码在视口中产生对角线:
GLint