本日の進捗

 父親から借りているビデオキャプチャPC-SDVD/U2Gを使ってゲーム画面をPCで表示してみた。
現在メインで使っているWin7PCでは画面が映らなかったが、サブのVistaPCでは正常動作した。
ゲーム画面を自分で自由に出来るバッファに格納する必要がある。
一番簡単なのはデスクトップをWin32APIの関数でキャプチャする方法である。
でもあまり美しい方法ではないので色々調べていたところ、DirectShowというものを使えば表示から何から自分のコードで出来るらしい。
フリーソフトでWebカメラとか操作出来るソフトはこれを使って作られているのか。
web上でサンプルコードを探してきてビルド&実行すると無事に表示は出来た。
あとはバッファに格納するだけだ。
細かい仕組みは全く理解していないし、さしあたって理解する気はない。
限られた時間は有効に使わなくては。
時間を費やすべきはDirectShowの仕組みの勉強ではない。
ジャジャガッチ | C/C++ | 21:55 | comments(0) | trackbacks(0) |

冬休みにやりたいこと

 冬休みに元気があればまたゲームのコントローラを作りたい。
今度はプログラマブルなPS用コントローラを作る予定。
部品集めのため今日ハードオフにジャンク品を漁りにいったのだが、
プログラマブルなPS用コントローラが500円で売っていたので買ってきた。
こういうものが売っているとなると自作するメリットが薄れるな。
もちろん自作したものの方が複雑な操作が可能なのだが。
やはり画像処理(や音声処理)などと絡めないとメリット激減だ。
画像を取り込んでスロットの目押しとかが出来れば面白い(これでアンリミテッドサガがクリアできれば最高だな)。
キャプチャボードはあるが、応答性はよくないかも。交換の必要ありか。
ケーブルから直接信号を呼んでPC上に表示できないだろうか。
ワイヤレスユニットもジャンクで購入したのでこれもいじりたいな。
あと、前にコントローラを作ったときはコントローラの基板をそのまま流用したためケーブルがごちゃごちゃしていた。自作の基板に置き換えたい。



ジャジャガッチ | 電子工作 | 19:07 | comments(0) | trackbacks(0) |

GLUTをオブジェクト指向的に使う

 GLUTはC言語で記述された古いライブラリであるため、オブジェクト指向との親和性があまりよくない。
描画用関数をグローバルに定義する必要があるというのが気に食わない。
出来れば各々のクラスがそれぞれの描画関数を持っていてそれを切り替えられるようにしたい。
作ってみた。
従来描画を行っていたグローバル関数内ではグローバルなオブジェクトポインタを参照して関数を呼び出すことしか行わない。具体的な描画は各々のオブジェクトが担当する。
大分見通しがよくなったか。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <freeglut¥freeglut.h>
#define PI 3.14159265358979


class TRI
{
protected:
    double f;
public:
    TRI(double f)
    {
        this->f = f;
    }
    void Set_f(double f)
    {
        this->f = f;
    }
    virtual void SetupForDraw() = 0;
    virtual void Draw() = 0;
};

TRI *p;
void Display()
{
    p->Draw();
}

class SIN : public TRI
{
public:
    SIN(double f):TRI(f){};
   
    void SetupForDraw()
    {
        p = this;
    }
    void Draw()
    {
        double x,y;
        glBegin(GL_POINTS);
        glColor3d(1.0,0.0,0.0);
   
        for(x=-1.0;x<=1.0;x+=0.01)
        {
            y = sin(2.0*PI*f*x/2.0);
            glVertex2d(x,y);
        }

        glEnd();

        glFlush();//溜め込んだ命令を吐き出させる
    }
};

class COS : public TRI
{
public:
    COS(double f):TRI(f){};
    void SetupForDraw()
    {
        p = this;
       
    }
    void Draw()
    {
        double x,y;
        glBegin(GL_POINTS);
        glColor3d(1.0,0.0,0.0);
   
        for(x=-1.0;x<=1.0;x+=0.01)
        {
            y = cos(2.0*PI*f*x/2.0);
            glVertex2d(x,y);
        }

        glEnd();

        glFlush();//溜め込んだ命令を吐き出させる
    }
};

int main(int argc,char *argv[])
{
    glutInit(&argc,argv);//OPENGL環境の初期化
    glutCreateWindow("TEST");//ウィンドウタイトル"test"でウィンドウを開く
    glutInitWindowSize(128,128);

    SIN s(1.0);
    COS c(1.0);
    c.SetupForDraw();
    c.Draw();

    glutDisplayFunc(Display);
    glMatrixMode(GL_MODELVIEW);//モデルビュー行列をターゲットに
    glLoadIdentity();//ターゲットを単位行列に初期化
    glOrtho(-1 ,1. , -1 , 1. , -1., 1.0 );
    glClear(GL_COLOR_BUFFER_BIT);

    glutMainLoop();
  
    return 0;
}
ジャジャガッチ | C/C++ | 10:46 | comments(0) | trackbacks(0) |

GLUTプログラム雛形

 数値計算の結果出力にGLUTを使おうと思っている。

雛形をおいておく。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <freeglut¥freeglut.h>
#define PI 3.14159265358979

void display(void)
{
    glMatrixMode(GL_MODELVIEW);//モデルビュー行列をターゲットに
    glLoadIdentity();//ターゲットを単位行列に初期化
    glOrtho(-1 ,1. , -1 , 1. , -1., 1.0 );
    glClear(GL_COLOR_BUFFER_BIT);
  
    double x,y;
    glBegin(GL_POINTS);
    glColor3d(1.0,0.0,0.0);
   
    for(x=-1.0;x<=1.0;x+=0.01)
    {
        y = sin(2.0*PI*x/2.0);
        glVertex2d(x,y);
    }

    glEnd();

    glFlush();//溜め込んだ命令を吐き出させる
}

int main(int argc,char *argv[])
{
    glutInit(&argc,argv);//OPENGL環境の初期化
    glutCreateWindow("TEST");//ウィンドウタイトル"test"でウィンドウを開く
    glutInitWindowSize(128,128);

    glutDisplayFunc(display);

    glutMainLoop();
  
    return 0;
}
ジャジャガッチ | C/C++ | 10:25 | comments(0) | trackbacks(0) |
1/1PAGES | |

12
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
PR
RECOMMEND
RECENT COMMENT
MOBILE
qrcode
OTHERS
Since 2013/09/17
LATEST ENTRY
CATEGORY
ARCHIVE
LINKS
PROFILE
SEARCH