はじめまして。年越しで挑戦しているのですがNGで ここに助言を求めにきました。ここに20年前 自作のLend3.c レイトレーシングソフトがあります。そして なにかでBuildした結果のlend3.exeとglut32.dllがあります。実はこれはSGI/WS用に開発したものをWindows用に変換しようとし損なったものです。
今、福祉関連で 手元のVC6で実行可能にしたいのです。
単にVCでコンパイルしようとすると
c:\program files\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2054: 'WINGDIAPI' の後にはカッコが必要です。
c:\program files\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2085: 'APIENTRY' : 仮引数リスト内にありません。以下100ほどが
出ます。
小生のPCはWindowsXPです。まず なにから手をだしてよいか助言願います。
#include <math.h> /* for sqrt()*/
#include <gl/gl.h>
#include <gl/device.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
の記述あり。 gl/device.hはPCのホルダーにありません。
なお、OpenGLを特につかったことはないのですが、変換でその記述をつかったかもしれません すでに認知症前兆もあるので質問の仕方も良くないかもしれませんが ゆっくりやりますで よろしくおねがいします
追加
検討に必要であろう ソースコードLend3c.cと.exe ファイルを指定するところに送ることはできます。
どうか よろしく おねがいします。
描画の最後の関数は以下をつかっています。
bgnline(); v2i(vert1); v2i(vert2); endline();
これはGlの線描の関数です。
それに
void initialize()
{ int ic,i,j,k;
qdevice(SKEY); /* key in S for saving*/
qdevice(ESCKEY);
qdevice(WINQUIT);
qdevice(REDRAW);
qdevice(INPUTCHANGE);
qdevice(MENUBUTTON); /* right mouse */
qdevice(MIDDLEMOUSE);
qdevice(LEFTMOUSE);
prefposition( xleft,xright,ybottom,ytop);/* set window area on screen axis including the frame and title*/
gwcid=winopen("lenticular design raytracing");
qenter(REDRAW, gwcid);
winconstraints();
doublebuffer();
RGBmode();
gconfig();
ortho2(0.0,1600.0, 0.0,1000.0);/* set window axis left-right,bottom-top*/
drawmode(NORMALDRAW);
subpixel(TRUE); /* positions screen vertices exactly */
mainmenu=newpup();
thickmenu=newpup();
addtopup(mainmenu,"MainMenu %t|1 radius(or airgap)/LEFT,pitch/Middle|2 profile on/off|3 move/LEFT,zoom/MIDDLE|4 Focusing/Viewside|5 Exp-End/Exit|6 integral profile on/off|7 reversal with airgap on/off|8 hardprint|9 thicness & reset all%m",thickmenu);
addtopup(thickmenu,"plate thickness etc%t %F|std 3.09mm%x1|3.10mm%x2|3.13mm%x3|3.16mm%x4|3.19mm%x5|match IPD dis%x10|match Pitch dis%x11|all reset%x0",setthick);
/* 8 colors vect */
ic=0;
for(i=0; i<2; i++)
for(j=0; j<2; j++)
for(k=0; k<2; k++){
cvec[ic][0]=255*i;
cvec[ic][1]=255*j;
cvec[ic][2]=255*k; ic++;
}
} /*end of initialize()*/
などを行っています。
まず、それほど古いソースコードの仕様であれば、現行の開発環境や
OS・ハードウェア(GDI)に依存する機能を実現させるには相当
の修正変更が必要になると思います。
多分、修正と言うよりは作り直しかと。
昨今OpenGLの参考になるコードを探すよりDirectXの方が素早く見つ
かりますし、参考本も多数あるかと思われます。
あまりに古い資産を流用されるより時代に即したものを基本とされる
方がいろんな面でコストが下がると思います。
ただ、年齢的にかなりしんどい勉強になるのでは・・・と思われます。
頑張って下さい!
以上。
助言 ありがとう
古さでの問題がOpenGLであれば それを使ってない可能性があります。
特段3Dのグラフィックではないので。
ソースや使用DLLでそれが確認する方法はありませんでしょうか
例えば 関数名が きわめてながい名前だけでも内容がわかるようなものとか?
glut32.dllがOpenGlでしょうか?
> c:\program files\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2054: 'WINGDIAPI' の後にはカッコが必要です。
> c:\program files\microsoft visual studio\vc98\include\gl\gl.h(1152) : error C2085: 'APIENTRY' : 仮引数リスト内にありません。
多分、これは
#include <Windows.h>
を追加してやれば消えると思いますが、
> #include <gl/device.h>
このファイルは(私のPCの)VC6には有りませんねぇ。
20年前だとVC1.0/2.0/4.0辺りですかね?
さすがにそこまで古いコンパイラは入っていないなぁ。
> glut32.dllがOpenGlでしょうか?
私のPCからはこのDLLを見つけることができませんでしたが、VC6であれば、
Dependency Walkerが入っているはずですので、このプログラムを起動し、
そのDLLをドロップしてやればDLLの持っている関数が分かります。
その関数名で判断できるかも知れません。
gl\〜.hは、SGI専用のものであり、たとえ当該のヘッダーが
存在していても、Xp上では動作しません。
OpenGLも同じフォルダーに似たようなヘッダーがありますが、
まったく異なるもので、利用できません。
特に、device.hはSGI専用のグラフィックス出力に関するもので、
SGIのハードウエアに依存したライブラリです。
従って、はんにゃさんが対象としているソースコードは
コンパイルもできませんし、実行もできません。
ツイート | ![]() |