首页 > 解决方案 > 我不能在一行中多次调用 rand() 吗?

问题描述

for (int i = 0; i < 12; i++) {
        Vertex v;
        v.pos = (glm::vec3)((GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1);
        v.col = (glm::vec3)((GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100);
        tri4.objData.vertices.push_back(v);
        std::cout << tri4.objData.vertices.at(i).pos.x <<"\t" <<i4.objData.vertices.at(i).pos.y<<"\t"<< tri4.objData.vertices.at(i).pos.z << "\n\n";
        std::cout << tri4.objData.vertices.at(i).col.x << "\t" << tri4.objData.vertices.at(i).col.y << "\t" << tri4.objData.vertices.at(i).col.z << "\n\n";

        tri4.objData.indices.push_back(i);
        std::cout << tri4.objData.indices.at(i) << '\n';
    }

这是我在这种情况下的 GL 代码,pos.x 和 pos.y 是相同的。这三个 rand() 在“v.pos=”行或“v.col=”行返回相同。我做到了t 使用 srand(time) 或其他东西。rand()s 在一行上返回相同的值吗?还是 vec3 有问题?

标签: c++random

解决方案


是的,函数的每次调用都被视为一个单独的调用,具有(很可能)不同的结果。

您可以使用任何功能验证这一点,例如:

#include <iostream>

int getVal() {
    static int val = 0;
    return ++val;
}

int main() {
    std::cout << getVal() * getVal() * getVal() << '\n';
}

这会给你1 * 2 * 3,或6


推荐阅读