1

私のコードは純粋に過剰な実装で機能しますが、qtで機能させようとしています。

ワイヤ メッシュ システムの質量点のベクトルがあります。

std::vector<masspoint> m_particles; 

問題は、私のqtバージョンでは、私が書いたものが実際に固執せず、ゼロの配列が残っていることです。基本的に、なぜglutバージョンが正しい値を持っているのか混乱していますが、qtバージョンは基本的に同一のコードであるとは限りません。Qtコードの何が問題になっていますか?

はい、qDebug を使用するとゼロしか表示されません。qt バージョンで描画関数を呼び出すと、すべての頂点ポイントがすべてのコンポーネントで 0 になるため、何も表示されません。

int myboog = 1;
int county = 0;
// Constructors
Cloth::Cloth(float width, float height, int particles_in_width, int particles_in_height):
m_width(particles_in_width),
m_height(particles_in_height),
m_dimensionWidth(width),
m_dimensionHeight(height),
m_distanceX(width/(float)particles_in_width),
m_distanceY(height/(float)particles_in_height)
{

    //Set the particle array to the given size
    //Height by width

    //mparticles is the name of our vector
    m_particles.resize(m_width*m_height);
    qDebug() << m_particles.size();

    // Create the point masses to simulate the cloth
    for (int x = 0; x < m_width; ++x)
    {
        for (int y=0; y < m_height; ++y)
        {
            // Place the pointmass of the cloth, lift the edges to give the wind more effect as the cloth falls
            Vector3f position = Vector3f(m_dimensionWidth * (x / (float)m_width),
                                         ((x==0)||(x==m_width-1)||(y==0)||(y==m_height-1)) ? m_distanceY/2.0f:0,
                                         m_dimensionHeight * (y / (float)m_height));

            // The gravity effect is applied to new pmasspoints
            m_particles[y * m_width + x] = masspoint(position,Vector3f(0,-0.06,0));

        }

    }

    int num = (int)m_particles.size();
    for (int i=0; i<num; ++i)
    {
        masspoint* p = &m_particles[i];
        if(myboog)
        {
            qDebug() << "test " <<  *p->getPosition().getXLocation() << county;
            county++;
        }
    }
    myboog = 0;

    // Calculate the normals for the first time so the initial draw is correctly lit
    calculateClothNormals();
}

CLoth のコンストラクターに含まれる質量点のコード

#ifndef MASSPOINT_H
#define MASSPOINT_H
#include <QGLWidget>
#include "vector3f.h"
class masspoint
{


private:
Vector3f m_position;                // Current Location of the pointmass
Vector3f m_velocity;                // Direction and speed the pointmass is traveling in

Vector3f m_acceleration;            // Speed at which the pointmass is accelerating (used for gravity)
Vector3f m_forceAccumulated;        // Force that has been accumulated since the last update
Vector3f m_normal;                  // Normal of this pointmass, used to light the cloth when drawing



float m_damping;                    // Amount of velocity lost per update
bool m_stationary;                  // Whether this pointmass is currently capible of movement

public:

masspoint& operator= (const masspoint& particle);


//Some constructors
masspoint();
masspoint(const masspoint& particle);
masspoint(Vector3f position, Vector3f acceleration);


//Like eulur integration
void integrate(float duration);



// Accessor functions

//Get the position of the point mass
inline Vector3f getPosition() const {return m_position;}

CLoth のコンストラクターに含まれるベクター関連の要素

#ifndef VECTOR3F_H
#define VECTOR3F_H

#include <math.h>

// Vector library to be used
class Vector3f
{
private:
    float m_x, m_y, m_z;
public:
     const float* getXLocation() const { return &m_x; }
4

0 に答える 0