Remove unused files

master
Jeremy Hu 2017-02-11 10:51:06 +09:30
parent 5766a4dfbf
commit 058d9f3c5b
5 changed files with 0 additions and 569 deletions

View File

@ -1,19 +0,0 @@
#include <QApplication>
#include <stdio.h>
#include <assert.h>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
assert(0 != freopen((a.applicationDirPath() +
"/dust3d.log").toUtf8(), "w", stdout));
assert(0 != freopen((a.applicationDirPath() +
"/dust3d_error.log").toUtf8(), "w", stderr));
w.show();
return a.exec();
}

View File

@ -1,23 +0,0 @@
#include <QtGui>
#include <QHBoxLayout>
#include <QDesktopWidget>
#include "mainwindow.h"
#include "render.h"
MainWindow::MainWindow(void) {
render = new Render;
int size = QDesktopWidget().availableGeometry(this).size().height() * 0.7;
resize(QSize(size, size));
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(render);
setLayout(mainLayout);
setWindowTitle(tr("Dust3D Experiment"));
}
void MainWindow::keyPressEvent(QKeyEvent *e) {
if (e->key() == Qt::Key_Escape) {
close();
} else {
QWidget::keyPressEvent(e);
}
}

View File

@ -1,21 +0,0 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
class Render;
class MainWindow : public QWidget {
Q_OBJECT
public:
MainWindow(void);
protected:
void keyPressEvent(QKeyEvent *event);
private:
Render *render;
};
#endif

View File

@ -1,469 +0,0 @@
#include <QtGui>
#include <QtOpenGL>
#include <assert.h>
#include <math.h>
#include "render.h"
#include "draw.h"
#include "bmesh.h"
#include "matrix.h"
#include "vector3d.h"
#include "subdivide.h"
static const float bmeshBallColors[][4] = {
{0.00, 0.78, 1.00, 0.5},
{1.00, 0.00, 0.00, 0.5},
{1.00, 1.00, 1.00, 0.5}
};
static const float bmeshBoneColor[3] = {1, 1, 0};
static Render *_this = 0;
static int debugOutputTop = 0;
int drawDebugPrintf(const char *fmt, ...) {
int x = 0;
int y = debugOutputTop + 10;
va_list args;
char text[1024];
va_start(args, fmt);
vsnprintf(text, sizeof(text), fmt, args);
debugOutputTop += 9;
if (debugOutputTop > 400) {
debugOutputTop = 0;
}
glColor3f(0, 0, 0);
return drawText(x, y, text);
}
static int drawBmeshBall(bmesh *bm, bmeshBall *ball) {
float color[4];
memcpy(color, bmeshBallColors[ball->type], sizeof(color));
if (BMESH_BALL_TYPE_ROOT == ball->type || BMESH_BALL_TYPE_KEY == ball->type) {
vec3 a = {_this->mouseWorldNearX, _this->mouseWorldNearY,
_this->mouseWorldNearZ};
vec3 b = {_this->mouseWorldFarX, _this->mouseWorldFarY,
_this->mouseWorldFarZ};
vec3 ab, ap, q;
float abDotAb;
float apDotAb;
float t;
vec3Sub(&b, &a, &ab);
vec3Sub(&ball->position, &a, &ap);
abDotAb = vec3DotProduct(&ab, &ab);
apDotAb = vec3DotProduct(&ap, &ab);
t = apDotAb / abDotAb;
if (t < 0.0f) {
t = 0.0f;
} else if (t > 1.0f) {
t = 1.0f;
}
vec3Scale(&ab, t, &q);
vec3Add(&a, &q, &q);
//drawDebugPrintf("q: %f,%f,%f t:%f", q.x, q.y, q.z, t);
if (vec3Distance(&ball->position, &q) <= ball->radius) {
color[3] = 1;
}
}
glColor4fv(color);
drawSphere(&ball->position, ball->radius, 36, 24);
return 0;
}
static void drawBmeshBallRecursively(bmesh *bm, bmeshBall *ball) {
bmeshBallIterator iterator;
bmeshBall *child;
drawBmeshBall(bm, ball);
for (child = bmeshGetBallFirstChild(bm, ball, &iterator);
child;
child = bmeshGetBallNextChild(bm, ball, &iterator)) {
drawBmeshBallRecursively(bm, child);
}
}
static void drawBmeshBallQuad(bmeshBall *ball) {
vec3 normal;
int j;
vec3 z, y;
quad q;
vec3Scale(&ball->localYaxis, ball->radius, &y);
vec3Scale(&ball->localZaxis, ball->radius, &z);
vec3Sub(&ball->position, &y, &q.pt[0]);
vec3Add(&q.pt[0], &z, &q.pt[0]);
vec3Sub(&ball->position, &y, &q.pt[1]);
vec3Sub(&q.pt[1], &z, &q.pt[1]);
vec3Add(&ball->position, &y, &q.pt[2]);
vec3Sub(&q.pt[2], &z, &q.pt[2]);
vec3Add(&ball->position, &y, &q.pt[3]);
vec3Add(&q.pt[3], &z, &q.pt[3]);
glColor4f(1.0f, 1.0f, 1.0f, 0.5);
glBegin(GL_QUADS);
vec3Normal(&q.pt[0], &q.pt[1], &q.pt[2], &normal);
for (j = 0; j < 4; ++j) {
glNormal3f(normal.x, normal.y, normal.z);
glVertex3f(q.pt[j].x, q.pt[j].y, q.pt[j].z);
}
glEnd();
glColor3f(0.0f, 0.0f, 0.0f);
glBegin(GL_LINE_STRIP);
for (j = 0; j < 4; ++j) {
glVertex3f(q.pt[j].x, q.pt[j].y, q.pt[j].z);
}
glVertex3f(q.pt[0].x, q.pt[0].y, q.pt[0].z);
glEnd();
}
static void drawBmeshBallQuadRecursively(bmesh *bm, bmeshBall *ball) {
bmeshBallIterator iterator;
bmeshBall *child;
/*
matrix matTmp;
matrix matCalc;
float quad[4][3] = {
{-ball->radius, +ball->radius, 0},
{-ball->radius, -ball->radius, 0},
{+ball->radius, -ball->radius, 0},
{+ball->radius, +ball->radius, 0},
};
matrixLoadIdentity(&matCalc);
matrixAppend(&matCalc,
matrixTranslate(&matTmp, ball->position.x, ball->position.y,
ball->position.z));
matrixAppend(&matCalc,
matrixRotate(&matTmp,
ball->rotateAngle, ball->rotateAround.x, ball->rotateAround.y,
ball->rotateAround.z));
matrixTransformVector(&matCalc, quad[0]);
matrixTransformVector(&matCalc, quad[1]);
matrixTransformVector(&matCalc, quad[2]);
matrixTransformVector(&matCalc, quad[3]);
glVertex3fv(quad[0]);
glVertex3fv(quad[1]);
glVertex3fv(quad[2]);
glVertex3fv(quad[3]);
*/
/*
glPushMatrix();
glTranslatef(ball->position.x, ball->position.y,
ball->position.z);
glRotatef(ball->rotateAngle, ball->rotateAround.x, ball->rotateAround.y,
ball->rotateAround.z);
glBegin(GL_QUADS);
glVertex3f(-ball->radius, +ball->radius, 0);
glVertex3f(-ball->radius, -ball->radius, 0);
glVertex3f(+ball->radius, -ball->radius, 0);
glVertex3f(+ball->radius, +ball->radius, 0);
glEnd();
glPopMatrix();
*/
//drawBmeshBallQuad(ball);
for (child = bmeshGetBallFirstChild(bm, ball, &iterator);
child;
child = bmeshGetBallNextChild(bm, ball, &iterator)) {
drawBmeshBallQuadRecursively(bm, child);
}
}
static int drawBmeshBone(bmesh *bm, bmeshBone *bone) {
glColor3fv(bmeshBoneColor);
bmeshBall *firstBall = bmeshGetBall(bm, bone->firstBallIndex);
bmeshBall *secondBall = bmeshGetBall(bm, bone->secondBallIndex);
drawCylinder(&firstBall->position, &secondBall->position, 0.1, 36, 24);
return 0;
}
int drawText(int x, int y, char *text) {
QFont font = QFont("Arial");
font.setPointSize(9);
font.setBold(false);
_this->renderText(x, y, QString(text), font);
return 0;
}
Render::Render(QWidget *parent)
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent) {
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(100);
mouseX = 0;
mouseY = 0;
cameraAngleX = 30;
cameraAngleY = -312;
cameraDistance = 14.4;
//cameraAngleX = 0;
//cameraAngleY = 0;
//cameraDistance = 0;
mouseScaleX = 1;
mouseScaleY = 1;
}
Render::~Render(void) {
}
void Render::initializeGL() {
glShadeModel(GL_SMOOTH);
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glDepthFunc(GL_LEQUAL);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
qglClearColor(QWidget::palette().color(QWidget::backgroundRole()));
glClearStencil(0);
glClearDepth(1.0f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GLfloat ambientLight[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat diffuseLight[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloat specularLight[] = {1, 1, 1, 1};
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
float lightDirection[4] = {0, 0, 1, 0};
glLightfv(GL_LIGHT0, GL_POSITION, lightDirection);
glEnable(GL_LIGHT0);
float shininess = 64.0f;
float specularColor[] = {1.0, 1.0f, 1.0f, 1.0f};
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularColor);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
drawInit();
}
void screenCoordsToWorld(float winX, float winY,
float *worldNearX, float *worldNearY, float *worldNearZ,
float *worldFarX, float *worldFarY, float *worldFarZ){
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winZ = 0;
GLdouble x, y, z;
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)winX;
winY = (float)viewport[3] - (float)winY;
winZ = 0;
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ,
(const GLdouble *)modelview, (const GLdouble *)projection, viewport,
&x, &y, &z);
*worldNearX = (float)x;
*worldNearY = (float)y;
*worldNearZ = (float)z;
{
vec3 origin = {(float)x, (float)y, (float)z};
drawDebugPoint(&origin, 0);
}
winZ = 1;
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ,
(const GLdouble *)modelview, (const GLdouble *)projection, viewport,
&x, &y, &z);
*worldFarX = (float)x;
*worldFarY = (float)y;
*worldFarZ = (float)z;
{
vec3 origin = {(float)x, (float)y, (float)z};
drawDebugPoint(&origin, 1);
}
{
vec3 topOrigin = {*worldNearX, *worldNearY, *worldNearZ};
vec3 bottomOrigin = {*worldFarX, *worldFarY, *worldFarZ};
glDisable(GL_LIGHTING);
// x z plane
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0);
glVertex3f(topOrigin.x, topOrigin.y, topOrigin.z);
glVertex3f(bottomOrigin.x, bottomOrigin.y, bottomOrigin.z);
glEnd();
glEnable(GL_LIGHTING);
//drawCylinder(&topOrigin, &bottomOrigin, 0.1, 36, 24);
}
}
#include "../data/bmesh_test_2.h"
void Render::paintGL() {
static bmesh *bm = 0;
_this = this;
debugOutputTop = 0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0, 0, -cameraDistance);
glRotatef(cameraAngleX, 1, 0, 0);
glRotatef(cameraAngleY, 0, 1, 0);
glColor3f(0, 0, 0);
drawDebugPrintf("cameraAngleX:%f cameraAngleY:%f cameraDistance:%f",
cameraAngleX, cameraAngleY, cameraDistance);
screenCoordsToWorld(_this->mouseX, _this->mouseY,
&_this->mouseWorldNearX, &_this->mouseWorldNearY, &_this->mouseWorldNearZ,
&_this->mouseWorldFarX, &_this->mouseWorldFarY, &_this->mouseWorldFarZ);
glColor3f(0.0f, 0.0f, 0.0f);
drawDebugPrintf("%d,%d -> %f,%f,%f %f,%f,%f", _this->mouseX, _this->mouseY,
_this->mouseWorldNearX, _this->mouseWorldNearY, _this->mouseWorldNearZ,
_this->mouseWorldFarX, _this->mouseWorldFarY, _this->mouseWorldFarZ);
drawGrid(10, 1);
glEnable(GL_LIGHTING);
if (0 == bm) {
bmeshBall ball;
bmeshBone bone;
unsigned int i;
bm = bmeshCreate();
for (i = 0; i < sizeof(bmeshTestBalls) / sizeof(bmeshTestBalls[0]); ++i) {
memset(&ball, 0, sizeof(ball));
ball.position.x = bmeshTestBalls[i][1];
ball.position.y = bmeshTestBalls[i][2];
ball.position.z = bmeshTestBalls[i][3];
ball.radius = bmeshTestBalls[i][4];
ball.type = bmeshTestBalls[i][5];
bmeshAddBall(bm, &ball);
}
for (i = 0; i < sizeof(bmeshTestBones) / sizeof(bmeshTestBones[0]); ++i) {
memset(&bone, 0, sizeof(bone));
bone.firstBallIndex = bmeshTestBones[i][0];
bone.secondBallIndex = bmeshTestBones[i][1];
bmeshAddBone(bm, &bone);
}
bmeshGenerate(bm);
}
if (bm) {
bmeshDraw(bm);
drawBmeshBallRecursively(bm, bmeshGetRootBall(bm));
//glBegin(GL_QUADS);
drawBmeshBallQuadRecursively(bm, bmeshGetRootBall(bm));
//glEnd();
{
int index;
/*
for (index = 0; index < bmeshGetBallNum(bm); ++index) {
bmeshBall *ball = bmeshGetBall(bm, index);
drawBmeshBall(bm, ball);
}*/
for (index = 0; index < bmeshGetBoneNum(bm); ++index) {
bmeshBone *bone = bmeshGetBone(bm, index);
//drawBmeshBone(bm, bone);
}
/*
glColor4f(1.0f, 1.0f, 1.0f, 0.5);
glBegin(GL_QUADS);
for (index = 0; index < bmeshGetQuadNum(bm); ++index) {
quad *q = bmeshGetQuad(bm, index);
vec3 normal;
int j;
vec3Normal(&q->pt[0], &q->pt[1], &q->pt[2], &normal);
for (j = 0; j < 4; ++j) {
glNormal3f(normal.x, normal.y, normal.z);
glVertex3f(q->pt[j].x, q->pt[j].y, q->pt[j].z);
}
}
glEnd();
glColor3f(0.0f, 0.0f, 0.0f);
for (index = 0; index < bmeshGetQuadNum(bm); ++index) {
quad *q = bmeshGetQuad(bm, index);
int j;
glBegin(GL_LINE_STRIP);
for (j = 0; j < 4; ++j) {
glVertex3f(q->pt[j].x, q->pt[j].y, q->pt[j].z);
}
glVertex3f(q->pt[0].x, q->pt[0].y, q->pt[0].z);
glEnd();
}*/
}
}
//glColor3f(0.0f, 0.0f, 0.0f);
//drawTestUnproject();
glPopMatrix();
//if (bm) {
// bmeshDestroy(bm);
// bm = 0;
//}
}
void Render::resizeGL(int w, int h) {
mouseScaleX = w / width();
mouseScaleY = h / height();
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, w/h, 1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
/*
void drawTestUnproject(void) {
float worldX, worldY, worldZ;
if (_this) {
screenCoordsToWorld(_this->mouseX, _this->mouseY, &worldX, &worldY, &worldZ);
glColor3f(0.0f, 0.0f, 0.0f);
drawDebugPrintf("%d,%d -> %f,%f,%f", _this->mouseX, _this->mouseY,
worldX, worldY, worldZ);
}
}*/
void Render::mousePressEvent(QMouseEvent *event) {
mouseX = event->x() * mouseScaleX;
mouseY = event->y() * mouseScaleY;
}
void Render::mouseMoveEvent(QMouseEvent *event) {
int x = event->x() * mouseScaleX;
int y = event->y() * mouseScaleY;
cameraAngleY += (x - mouseX);
cameraAngleX += (y - mouseY);
update();
mouseX = x;
mouseY = y;
}
void Render::wheelEvent(QWheelEvent * event) {
cameraDistance -= event->delta() * 0.01f;
}

View File

@ -1,37 +0,0 @@
#ifndef RENDER_H
#define RENDER_H
#include <QGLWidget>
class Render : public QGLWidget {
Q_OBJECT
public:
Render(QWidget *parent = 0);
~Render(void);
protected:
void initializeGL(void);
void paintGL(void);
void resizeGL(int width, int height);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent * event);
public:
int mouseX;
int mouseY;
float mouseScaleX;
float mouseScaleY;
float mouseWorldNearX;
float mouseWorldNearY;
float mouseWorldNearZ;
float mouseWorldFarX;
float mouseWorldFarY;
float mouseWorldFarZ;
float cameraAngleX;
float cameraAngleY;
float cameraDistance;
};
#endif