本文整理汇总了C++中Vector4函数的典型用法代码示例。如果您正苦于以下问题:C++ Vector4函数的具体用法?C++ Vector4怎么用?C++ Vector4使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Vector4函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: glGenVertexArrays
void MD5Node::DebugDrawJointTransforms(float size, bool worldSpace) {
//Temporary VAO and VBO
unsigned int skeletonArray;
unsigned int skeletonBuffer;
unsigned int skeletonColourBuffer;
glGenVertexArrays(1, &skeletonArray);
glGenBuffers(1, &skeletonBuffer);
glGenBuffers(1, &skeletonColourBuffer);
//Temporary chunk of memory to keep our joint positions in
int numVerts = currentSkeleton.numJoints * 6;
Vector3* skeletonVertices = new Vector3[numVerts];
Vector4* skeletonColours = new Vector4[numVerts];
for (int i = 0; i < currentSkeleton.numJoints; ++i) {
Matrix4 transform = (worldSpace ? currentSkeleton.joints[i].transform : currentSkeleton.joints[i].localTransform);
Vector3 start = transform.GetPositionVector();
transform.SetPositionVector(Vector3(0, 0, 0));
Vector4 endX = transform * Vector4(1, 0, 0, 1);
Vector4 endY = transform * Vector4(0, 1, 0, 1);
Vector4 endZ = transform * Vector4(0, 0, 1, 1);
skeletonVertices[(i * 6) + 0] = currentSkeleton.joints[i].transform.GetPositionVector();
skeletonVertices[(i * 6) + 1] = currentSkeleton.joints[i].transform.GetPositionVector() + (endX.ToVector3() * size);
skeletonVertices[(i * 6) + 2] = currentSkeleton.joints[i].transform.GetPositionVector();
skeletonVertices[(i * 6) + 3] = currentSkeleton.joints[i].transform.GetPositionVector() + (endY.ToVector3() * size);
skeletonVertices[(i * 6) + 4] = currentSkeleton.joints[i].transform.GetPositionVector();
skeletonVertices[(i * 6) + 5] = currentSkeleton.joints[i].transform.GetPositionVector() + (endZ.ToVector3() * size);
skeletonColours[(i * 6) + 0] = Vector4(1, 0, 0, 1);
skeletonColours[(i * 6) + 1] = Vector4(1, 0, 0, 1);
skeletonColours[(i * 6) + 2] = Vector4(0, 1, 0, 1);
skeletonColours[(i * 6) + 3] = Vector4(0, 1, 0, 1);
skeletonColours[(i * 6) + 4] = Vector4(0, 0, 1, 1);
skeletonColours[(i * 6) + 5] = Vector4(0, 0, 1, 1);
}
//You should know what this all does by now, except we combine it with the draw operations in a single function
glBindVertexArray(skeletonArray);
glBindBuffer(GL_ARRAY_BUFFER, skeletonBuffer);
glBufferData(GL_ARRAY_BUFFER, currentSkeleton.numJoints*sizeof(Vector3) * 6, skeletonVertices, GL_STREAM_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, skeletonColourBuffer);
glBufferData(GL_ARRAY_BUFFER, currentSkeleton.numJoints*sizeof(Vector4) * 6, skeletonColours, GL_STREAM_DRAW);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glLineWidth(2.0f);
glDrawArrays(GL_LINES, 0, currentSkeleton.numJoints * 6); // draw Bones
glLineWidth(1.0f);
glBindVertexArray(0);
//Delete the VBO and VAO, and the heap memory we allocated earlier
glDeleteVertexArrays(1, &skeletonArray);
glDeleteBuffers(1, &skeletonBuffer);
glDeleteBuffers(1, &skeletonColourBuffer);
delete[]skeletonVertices;
delete[]skeletonColours;
}
示例2:
Vector4 Vector4::xwzw() const { return Vector4 (x, w, z, w); }
示例3: Read
Vector4 Deserializer::ReadVector4()
{
float data[4];
Read(data, sizeof data);
return Vector4(data);
}
示例4: pathname
DTerr ImporterGeometryTWM::import(GeometryResource *target, std::string args)
{
FilePath pathname(target->path());
// open the file
BinaryFileStream file;
FileManager::open(file, pathname, true);
//
// Read_ in header
//
DTuint magic;
file >> magic;
if (magic != MAGIC) {
return DT3_ERR_FILE_WRONG_TYPE;
}
DTuint version;
file >> version;
//
// Read_ in data
//
_normals_count = 0;
_uv_set_0_count = 0;
_uv_set_1_count = 0;
_weights_count = 0;
DTint section,size;
file >> section >> size;
switch(section) {
case FILE: read_file(file, size); break;
default: WARNINGMSG("Invalid section"); break;
};
//
// Build Streams
//
// Calculate sizes needed
DTuint joints_size = 0;
for (DTuint i = 0; i < _meshes.size(); ++i) {
joints_size += _meshes[i]._joint_names.size();
}
// allocate joint names, force first one to always be identity
std::vector<std::string> joint_names;
joint_names.resize(joints_size);
DTuint joint_offset = 0; // Account for identity above
for (DTuint i = 0; i < _meshes.size(); ++i) {
MeshData &meshdata = _meshes[i];
if (meshdata._vertices.size() == 0)
continue;
std::shared_ptr<Mesh> mesh = Mesh::create();
// copy joint names
for (DTuint j = 0; j < meshdata._joint_names.size(); ++j) {
joint_names[joint_offset + j] = meshdata._joint_names[j];
}
std::vector<Vector3> vertex_stream;
std::vector<Vector3> normals_stream;
std::vector<Vector2> uvs_stream_0;
std::vector<Vector2> uvs_stream_1;
std::vector<Vector4> weights_strength;
std::vector<WeightsIndex> weights_index;
std::vector<Triangle> indices;
vertex_stream = meshdata._vertices;
normals_stream = meshdata._normals;
uvs_stream_0 = meshdata._uv_sets[0]._uvs;
uvs_stream_1 = meshdata._uv_sets[1]._uvs;
indices = meshdata._indices;
if (meshdata._weights.size()) {
weights_index.resize(meshdata._weights.size());
weights_strength.resize(meshdata._weights.size());
for (DTuint j = 0; j < meshdata._weights.size(); ++j) {
weights_strength[j] = Vector4( meshdata._weights[j].weight_1(),
meshdata._weights[j].weight_2(),
meshdata._weights[j].weight_3(),
meshdata._weights[j].weight_4() );
weights_index[j] = WeightsIndex( meshdata._weights[j].bone_1(),
meshdata._weights[j].bone_2(),
meshdata._weights[j].bone_3(),
meshdata._weights[j].bone_4() );
}
}
mesh->set_vertex_stream(vertex_stream);
//.........这里部分代码省略.........