必須課題1:以下の3つの変換行列を計算するプログラムを作成せよ.
ウィンドウの幅と高さから,ビューポート変換行列を求める
レンズの焦点距離から,透視変換行列を求める
X 軸まわりの回転角と平行移動量から,モデルビュー変換行列を求める
必須課題2:3次元空間中で定義された直線を2次元空間へ変換して描画し,これにより立体的な物体(円柱,球,グラフなど何でもよい)を描画するプログラムを作成せよ
必須課題1で作成した関数と,前回の演習で作成した自前の直線描画プログラムを組み合わせよ
前回の課題が出来ていない人は,前回のサンプルプログラムを元にしてもよい.
という宿題なんですが全く分かりません。教えてください。
前回の演習で作成した自前の直線描画プログラム
↓
#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
#define IMG_X 500
#define IMG_Y 500
unsigned char image[IMG_Y][IMG_X][3];
void swap(int *nx, int *ny)
{
int temp = *nx;
*nx = *ny;
*ny = temp;
}
void clearImage(void) {
int x, y;
for(y = 0; y < IMG_Y; y++) {
for(x = 0; x < IMG_X; x++) {
image[y][x][0] = 0;
image[y][x][1] = 0;
image[y][x][2] = 0;
}
}
}
void drawLine(int xs, int ys, int xe, int ye) {
int x, y ;
double z, dx, dy, sum;
if(xs > xe){
swap(&xs,&xe);
swap(&ys,&ye);
}
dx = xe - xs;
dy = ye - ys;
z=dy/dx;
if(z>0){
if(z<1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dy;
if(sum >= dx) {
sum -= dx;
y++;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum += dx;
if(sum >= dy) {
sum -= dy;
x++;
}
}
}
}else{
if(z>-1){
y = ys;
sum = dx / 2;
for(x = xs; x <= xe; x++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dy;
if(sum >= dx) {
sum -= dx;
y--;
}
}
}else{
x = xs;
sum = dy / 2;
for(y = ys; y <= ye; y++) {
image[y][x][0] = 255;
image[y][x][1] = 255;
image[y][x][2] = 255;
sum -= dx;
if(sum >= dy) {
sum -= dy;
x--;
}
}
}
}
}
void display(void) {
clearImage();
drawLine(400, 100, 100, 200);
drawLine(400, 250, 100, 150);
drawLine(100, 100, 200, 500);
glRasterPos2i(-1, 1);
glPixelZoom(1, -1);
glDrawPixels(IMG_X, IMG_Y, GL_RGB, GL_UNSIGNED_BYTE, image);
glutSwapBuffers();
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(IMG_X, IMG_Y);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
必須課題1のプログラム
↓
#include <stdio.h>
#include <GL/glut.h>
#include <stdlib.h>
#define IMG_X 500
#define IMG_Y 500
#define IMG_Z 500
#define Focus 10
double viewport[3][3]={{IMG_X/2,0,IMG_Y/2},
{0,-IMG_Y/2,IMG_X/2},
{0,0,1}};
double toushi[3][4]={{Focus,0,0,0},
{0,Focus,0,0},
{0,0,1,0}};
double modelview[4][4]={{1,0,0,0},
{0,0.5,0.866025405,0},
{0,-0.866025405,0.5,0},
{0,0,0,1}};
double martrix[3][4];
double martrix2[3][4];
void add(){
int i,j,k;
for (i=0;i<3;i++){
for (j=0;j<4;j++){
martrix[j]=0;
for(k=0;k<4;k++){
martrix[j]+=toushi[k]*modelview[k][j];
}
}
}
for (i=0;i<3;i++){
for (j=0;j<4;j++){
martrix2[j]=0;
for(k=0;k<3;k++){
martrix2[j]+=viewport[k]*martrix[k][j];
}
}
}
}
よろしくお願いします。
宿題が全く分からないので教えてください
Re: 宿題が全く分からないので教えてください
誰も課題に答えてくれないからと入って、時間を開けて同じ内容を投稿するのはどうかと思いますが。
取りあえず、どちらか一つは消去しておいたほうがよいかと思います。
取りあえず、どちらか一つは消去しておいたほうがよいかと思います。
Re: 宿題が全く分からないので教えてください
必須課題1がそこまで出来ているなら、
>前回の演習で作成した自前の直線描画プログラム
レベルのプログラムを書く事ができた貴殿なら
>全く分かりません。教えてください。
のレベルの訳がありません。もう少し頑張ってみましょう。
>前回の演習で作成した自前の直線描画プログラム
レベルのプログラムを書く事ができた貴殿なら
>全く分かりません。教えてください。
のレベルの訳がありません。もう少し頑張ってみましょう。