約 2,224,214 件
https://w.atwiki.jp/japanesehiphop/pages/4376.html
・MEMBER 将軍 MC林太郎 FOX MAO BANSEI ・ANALOG [SINGLE] 2019 BATISTA BOMB
https://w.atwiki.jp/opengl/pages/296.html
環境マッピングです。 正面の球に部屋を反射させて描画します。 room.xは、ここからダウンロードできます。 右クリックして、名前を付けてリンク先を保存してください。 wall.png vertex.shader varying vec3 P; varying vec3 N; varying vec4 Reflect; uniform mat4 ViewTranspose;//ビュー変換だけのモデルビュー行列の転置行列 void main(void) { P = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); vec3 incident = normalize(P);//入射視線ベクトル vec3 reflect0 = reflect(incident, N);//その反射ベクトル Reflect = ViewTranspose * vec4(reflect0, 0.0);//ビュー行列の転置行列を乗じる gl_Position = ftransform(); } flagment.shader varying vec3 P; varying vec3 N; varying vec4 Reflect; uniform samplerCube sampler; uniform float reflectivity; void main(void) { vec3 L = normalize(gl_LightSource[0].position.xyz - P); N = normalize(N); vec4 ambient = gl_FrontLightProduct[0].ambient; float dotNL = dot(N, L); vec4 diffuse = gl_FrontLightProduct[0].diffuse * max(0.0, dotNL); vec3 V = normalize(-P); vec3 H = normalize(L + V); float powNH = pow(max(dot(N, H), 0.0), gl_FrontMaterial.shininess); if(dotNL = 0.0) powNH = 0.0; vec4 specular = gl_FrontLightProduct[0].specular * powNH; //オブジェクトの色と環境マップを線形補間 gl_FragColor = mix(ambient + diffuse, textureCube(sampler, Reflect.stp), reflectivity) + specular; } GLSL.h #pragma once #include stdio.h //GLSLクラス class GLSL{ public GLuint ShaderProg; GLuint VertexShader, FragmentShader; void ReadShaderCompile(GLuint Shader, const char *File);//shader fileを読み込みコンパイルする void Link( GLuint Prog );//リンクする void InitGLSL(const char *VertexFile);//GLSLの初期化 void InitGLSL(const char *VertexFile, const char *FragmentFile);//GLSLの初期化 void ON();//シェーダー描画に切り替え void OFF();//シェーダー解除 ~GLSL(); }; void GLSL ReadShaderCompile(GLuint Shader, const char *File){ FILE *fp; char *buf; GLsizei size, len; GLint compiled; fopen_s( fp,File, rb ); if(!fp) printf( ファイルを開くことができません %s\n , File); fseek(fp, 0, SEEK_END); size = ftell(fp); buf = (GLchar *)malloc(size); if (buf == NULL) { printf( メモリが確保できませんでした \n ); } fseek(fp, 0, SEEK_SET); fread(buf, 1, size, fp); glShaderSource(Shader, 1, (const GLchar **) buf, size); free(buf); fclose(fp); glCompileShader(Shader); glGetShaderiv( Shader, GL_COMPILE_STATUS, compiled ); if ( compiled == GL_FALSE ) { printf( コンパイルできませんでした!! %s \n , File); glGetProgramiv( Shader, GL_INFO_LOG_LENGTH, size ); if ( size 0 ) { buf = (char *)malloc(size); glGetShaderInfoLog( Shader, size, len, buf); printf(buf); free(buf); } } } void GLSL Link( GLuint Prog ){ GLsizei size, len; GLint linked; char *infoLog ; glLinkProgram( Prog ); glGetProgramiv( Prog, GL_LINK_STATUS, linked ); if ( linked == GL_FALSE ){ printf( リンクできませんでした!! \n ); glGetProgramiv( Prog, GL_INFO_LOG_LENGTH, size ); if ( size 0 ){ infoLog = (char *)malloc(size); glGetProgramInfoLog( Prog, size, len, infoLog ); printf(infoLog); free(infoLog); } } } void GLSL InitGLSL(const char *VertexFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); ReadShaderCompile(VertexShader, VertexFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glDeleteShader(VertexShader); Link(ShaderProg); } void GLSL InitGLSL(const char *VertexFile, const char *FragmentFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); ReadShaderCompile(VertexShader, VertexFile); ReadShaderCompile(FragmentShader, FragmentFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glAttachShader(ShaderProg, FragmentShader); glDeleteShader(VertexShader); glDeleteShader(FragmentShader); Link(ShaderProg); } void GLSL ON(){ glUseProgram(ShaderProg); } void GLSL OFF(){ glUseProgram(0); } GLSL ~GLSL(){ glDeleteProgram(ShaderProg); } PNG.h #pragma once #include lodepng.h //テクスチャクラス class TEXTURE{ protected LodePNG_Decoder decoder;//デコーダ unsigned char* buffer;//バッファ size_t buffersize, imagesize;//サイズ public TEXTURE(); TEXTURE(const char* FileName);//コンストラクタ void LOAD_PNG(const char* FileName);//PNG読み込み unsigned char* image;//イメージポインタ unsigned int Width,Height;//画像サイズ }; TEXTURE TEXTURE(){ } TEXTURE TEXTURE(const char* FileName){ LOAD_PNG(FileName); } void TEXTURE LOAD_PNG(const char* FileName){ LodePNG_Decoder_init( decoder); //ロード LodePNG_loadFile( buffer, buffersize, FileName); //デコード LodePNG_decode( decoder, image, imagesize, buffer, buffersize); //幅,高さ Width = decoder.infoPng.width;Height = decoder.infoPng.height; } xfile.h #include PNG.h using namespace std; //3つのベクトル struct Vector3f{ float x; float y; float z; }vec3d; Vector3f operator*(Vector3f v,float size){ v.x *= size; v.y *= size; v.z *= size; return v; } //4つのベクトル struct Vector4f{ float x; float y; float z; float w; }vec4d; //4つのカラー struct Color4{ float r; float g; float b; float a; }; //4つの反射 struct Reflection4{ Color4 diffuse; Color4 ambient; Color4 emission; Color4 specular; }; //UV座標 struct UV{ float u;//u値 float v;//v値 }vec2d; //ポリゴンデータ struct Triangle{ Vector3f TriVer; Vector3f TriNor; UV TriUV; }Tri; //ポリゴンデータ struct Quadrangle{ Vector3f QuadVer; Vector3f QuadNor; UV QuadUV; }Quad; //マテリアル構造体 struct MATERIAL{ string MaterialName;//マテリアル名 Reflection4 MaterialColor;//反射 float Shininess;//shininess string TextureName;//テクスチャ名 int TexNo;//テクスチャNO. vector Triangle Tridata;//三角面データ vector Quadrangle Quaddata;//四角面データ }mtl; //モデルクラス class MODEL{ protected vector MATERIAL Material;//マテリアル vector TEXTURE* TexData;//テクスチャデータ vector GLuint TexID;//テクスチャID GLuint TexID2;//代入用 TEXTURE* tex;//代入用 public MODEL(); MODEL(char* FileName,int size);//コンストラクタ bool XFILE_Load(char* FileName,int size);//ロード void Draw(); }; MODEL MODEL(){ } MODEL MODEL(char* FileName,int size){ XFILE_Load(FileName, size); } //描画 void MODEL Draw(){ glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); for(int i=0;i (signed)Material.size();i++){ glPushMatrix(); glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,(const GLfloat *) Material[i].MaterialColor.ambient); glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,(const GLfloat *) Material[i].MaterialColor.diffuse); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,(const GLfloat *) Material[i].MaterialColor.specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,Material[i].Shininess); if(Material[i].TexNo 0){ glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, TexID[Material[i].TexNo-1]); }else{ glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } if(Material[i].Tridata.size() 1){ glVertexPointer(3, GL_FLOAT,sizeof(Tri) , Material[i].Tridata[0].TriVer.x); glNormalPointer(GL_FLOAT,sizeof(Tri), Material[i].Tridata[0].TriNor.x); if(Material[i].TexNo 0)glTexCoordPointer(2, GL_FLOAT, sizeof(Tri), Material[i].Tridata[0].TriUV.u); glDrawArrays(GL_TRIANGLES,0,Material[i].Tridata.size()); } if(Material[i].Quaddata.size() 1){ glVertexPointer(3, GL_FLOAT,sizeof(Quad) , Material[i].Quaddata[0].QuadVer.x); glNormalPointer(GL_FLOAT,sizeof(Quad), Material[i].Quaddata[0].QuadNor.x); if(Material[i].TexNo 0)glTexCoordPointer(2, GL_FLOAT, sizeof(Quad), Material[i].Quaddata[0].QuadUV.u); glDrawArrays(GL_QUADS,0,Material[i].Quaddata.size()); } glPopMatrix(); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisable(GL_TEXTURE_2D); } //Xファイル読み込み bool MODEL XFILE_Load(char* FileName,int size){ vector Vector3f Vertex;//頂点 vector Vector3f Normal;//法線 vector UV uv;//UV vector int VertexIndex; vector int NormalIndex; vector int MaterialIndex; vector int FaceIndex; char key[255]; char buf[255]; //Xファイルを開いて内容を読み込む FILE* fp=NULL; fopen_s( fp,FileName, rt ); int v1=0,v2=0,v3=0,v4=0; int Count=0; bool flag=false; string str= ; //読み込み fseek(fp,SEEK_SET,0); while(!feof(fp)) { //キーワード 読み込み ZeroMemory(key,sizeof(key)); fscanf_s(fp, %s ,key,sizeof(key)); //テンプレート読み飛ばし if(strcmp(key, template )==0){ while(strcmp(key, } )){ fscanf_s(fp, %s ,key,sizeof(key)); } continue; } //マテリアル読み込み if(strcmp(key, Material )==0) { if(flag)Material.push_back(mtl); flag=true; fgets(buf,sizeof(buf),fp);//直後の行にあると推定 改行する //ディフューズ fscanf_s(fp, %f;%f;%f;%f;; , vec4d.x, vec4d.y, vec4d.z, vec4d.w); mtl.MaterialColor.diffuse=(const Color4 )vec4d; //SHININESS fscanf_s(fp, %f; , mtl.Shininess); //スペキュラー fscanf_s(fp, %f;%f;%f;; , vec4d.x, vec4d.y, vec4d.z); mtl.MaterialColor.specular=(const Color4 )vec4d; //エミッシブ fscanf_s(fp, %f;%f;%f;; , vec4d.x, vec4d.y, vec4d.z); mtl.MaterialColor.ambient=(const Color4 )vec4d; //テクスチャー fscanf_s(fp, %s ,key,sizeof(key)); if(strcmp(key, TextureFilename )==0) { fgets(buf,sizeof(buf),fp);//直後の行にあると推定 改行する //map_Kd テクスチャー fscanf_s(fp, %s ,buf,255); mtl.TextureName=buf; str=mtl.TextureName; mtl.TextureName=str.substr(str.find_first_of( \ ,0)+1,str.find_last_of( \ ,255)-1); //テクスチャを作成 TexData.push_back(tex); TexData[TexData.size()-1] = new TEXTURE(mtl.TextureName.c_str());; mtl.TexNo=TexData.size(); TexID.push_back(TexID2); glGenTextures(1, (GLuint *) TexID[TexData.size()-1]); glBindTexture(GL_TEXTURE_2D, TexID[TexData.size()-1]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glEnable(GL_TEXTURE_2D); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,TexData[TexData.size()-1]- Width, TexData[TexData.size()-1]- Height, 0,GL_RGBA, GL_UNSIGNED_BYTE, TexData[TexData.size()-1]- image); glDisable(GL_TEXTURE_2D); } } //頂点 読み込み if(strcmp(key, Mesh )==0) { fgets(buf,sizeof(buf),fp);//データは2行下にあると推定 改行する fgets(buf,sizeof(buf),fp); Count=atoi(buf); for(int i=0;i Count ;i++) { fscanf_s(fp, %f;%f;%f;, , vec3d.x, vec3d.y, vec3d.z); Vertex.push_back(vec3d*(float)size); } //頂点インデックス読み込み fgets(buf,sizeof(buf),fp);//データは2行下にあると推定 改行する fgets(buf,sizeof(buf),fp); while(strchr(buf, ; )==NULL){fgets(buf,sizeof(buf),fp);}//空行対策 Count=atoi(buf); for(int i=0;i Count ;i++) { int dammy=0; fgets(buf,sizeof(buf),fp); str=buf; string size_type first = str.find_first_not_of( ); string size_type index = str.find( 3; ); if(index-first==0){ sscanf_s(buf, %d;%d,%d,%d;, , dammy, v1, v2, v3); VertexIndex.push_back(v1); VertexIndex.push_back(v2); VertexIndex.push_back(v3); } if((index==-1)||(index-first 1)){ sscanf_s(buf, %d;%d,%d,%d,%d;, , dammy, v1, v2, v3, v4); VertexIndex.push_back(v1); VertexIndex.push_back(v2); VertexIndex.push_back(v3); VertexIndex.push_back(v4); } FaceIndex.push_back(dammy); } } //法線 読み込み if(strcmp(key, MeshNormals )==0) { fgets(buf,sizeof(buf),fp);//データは2行下にあると推定 改行する fgets(buf,sizeof(buf),fp); Count=atoi(buf); for(int i=0;i Count ;i++) { fscanf_s(fp, %f;%f;%f;, , vec3d.x, vec3d.y, vec3d.z); Normal.push_back(vec3d); } //法線インデックス読み込み fgets(buf,sizeof(buf),fp);//データは2行下にあると推定 改行する fgets(buf,sizeof(buf),fp); while(strchr(buf, ; )==NULL){fgets(buf,sizeof(buf),fp);}//空行対策 Count=atoi(buf); for(int i=0;i Count ;i++) { int dammy=0; fgets(buf,sizeof(buf),fp); str=buf; string size_type first = str.find_first_not_of( ); string size_type index = str.find( 3; ); if(index-first==0){ sscanf_s(buf, %d;%d,%d,%d;, , dammy, v1, v2, v3); NormalIndex.push_back(v1); NormalIndex.push_back(v2); NormalIndex.push_back(v3); } if((index==-1)||(index-first 1)){ sscanf_s(buf, %d;%d,%d,%d,%d;, , dammy, v1, v2, v3, v4); NormalIndex.push_back(v1); NormalIndex.push_back(v2); NormalIndex.push_back(v3); NormalIndex.push_back(v4); } } } //テクスチャー座標 読み込み if(strcmp(key, MeshTextureCoords )==0) { fgets(buf,sizeof(buf),fp);//データは2行下にあると推定 改行する fgets(buf,sizeof(buf),fp); while(strchr(buf, ; )==NULL){fgets(buf,sizeof(buf),fp);}//空行対策 Count=atoi(buf); for(int i=0;i Count ;i++) { fscanf_s(fp, %f;%f;, , vec2d.u, vec2d.v); uv.push_back(vec2d); } } //マテリアルリスト if(strcmp(key, MeshMaterialList )==0) { fgets(buf,sizeof(buf),fp);//空改行 fgets(buf,sizeof(buf),fp);//マテリアル数 fgets(buf,sizeof(buf),fp);//リスト要素数 Count=atoi(buf); for(int i=0;i Count;i++) { fgets(buf,sizeof(buf),fp); int test=atoi(buf); MaterialIndex.push_back(test); } } } if(flag)Material.push_back(mtl); fclose(fp); Count=0; //マテリアル毎のデータを作成 for(int i=0;i (signed)MaterialIndex.size();i++){ if(FaceIndex[i]==3){ for(int j=0;j 3;j++){ Tri.TriVer=Vertex[VertexIndex[Count+j]]; Tri.TriNor=Normal[NormalIndex[Count+j]]; Tri.TriUV=uv[VertexIndex[Count+j]]; Material[MaterialIndex[i]].Tridata.push_back(Tri); } Count+=3; }else{ for(int j=0;j 4;j++){ Quad.QuadVer=Vertex[VertexIndex[Count+j]]; Quad.QuadNor=Normal[NormalIndex[Count+j]]; Quad.QuadUV=uv[VertexIndex[Count+j]]; Material[MaterialIndex[i]].Quaddata.push_back(Quad); } Count+=4; } } Vertex.clear(); Normal.clear(); uv.clear(); VertexIndex.clear(); NormalIndex.clear(); MaterialIndex.clear(); FaceIndex.clear(); return true; } main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include stdio.h #include windows.h #include GL/glew.h #include GLSL.h #include math.h #include GL/freeglut/freeglut.h #include xfile.h #define PAI 3.141592f //affine変換用変数 float pos[] = { 0.0f, 1.5f, 0.0f }; //object中心のxyz座標 float scale[] = { 1.0f, 1.0f, 1.0f };//大きさ(倍率) float angle[] = { 0.0f, 0.0f, 0.0f };//回転角度 float lightPos[] = {0.0f, 5.0f, 0.0f, 1.0f};//光源位置 //カメラと視体積 struct View{ float pos[3];//位置(視点) float cnt[3];//注視点 float dist; //注視点から視点までの距離 float theta; //仰角(水平面との偏角) float phi; //方位角 //視体積 float fovY; //視野角 float nearZ; //前方クリップ面(近平面) float farZ; //後方クリップ面(遠平面) }; View view = { 0.0f, 0.0f, 0.0f,//pos(仮設定) 0.0f, 1.5f, 0.0f,//cnt 1.0f, 10.0f, 0.0f,//dist, theta, phi 60.0f, 0.1f, 100.0f//fovY,nearZ, farZ }; View view0 = view; //Windowのサイズ int width = 640; int height = 480; //アフィン変換 enum SELECT_KEY {ROTATE, SCALE, TRANSLATE, LIGHT}; SELECT_KEY sKey = TRANSLATE; //マウス操作 int xStart, yStart; bool flagMouse = false; //光源位置変更フラグ bool flagLight = false;//追加 float reflectivity0 = 0.5;//反射率 GLSL glsl; MODEL* model; //テクスチャ用 #define TEX_WIDTH 128 #define TEX_HEIGHT 128 //テクスチャー構造体 struct Target{ GLenum name;//ターゲット名 GLint x, y;//部分画像の位置 GLdouble cx, cy, cz;//注視点 GLdouble ux, uy, uz;//アップベクトル }; struct Target target[] = { { //右 GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, TEX_HEIGHT, 1.0, 0.0, 0.0, 0.0, -1.0, 0.0, }, { //左 GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, }, { //天井 GL_TEXTURE_CUBE_MAP_POSITIVE_Y, TEX_WIDTH, TEX_HEIGHT, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, }, { //床 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, TEX_WIDTH,0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, }, { //手前 GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 2*TEX_WIDTH, TEX_HEIGHT, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0, }, { //奥 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 2*TEX_WIDTH, 0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, } }; void setCubeMap() { for(int i = 0; i 6; i++) glTexImage2D(target[i].name,0,GL_RGBA,TEX_WIDTH,TEX_HEIGHT,0,GL_RGBA,GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_WRAP_R,GL_REPEAT); glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP,GL_TEXTURE_MIN_FILTER,GL_LINEAR); } void resize(int w, int h){ glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(view.fovY, (double)w/(double)h, view.nearZ, view.farZ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(cos(PAI * view.theta /180.0) = 0.0){//カメラ仰角90度でビューアップベクトル切替 gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0); }else{ gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0); } //表示ウィンドウのサイズ width = w; height = h; } void setCamera() { double pp = PAI / 180.0f; view.pos[2] =(float)(view.cnt[2] + view.dist * cos(pp * view.theta) * cos(pp * view.phi));//z view.pos[0] =(float)(view.cnt[0] + view.dist * cos(pp * view.theta) * sin(pp * view.phi));//x view.pos[1] =(float)(view.cnt[1] + view.dist * sin(pp * view.theta));//y resize(width, height); } void draw(void) { float ambient[] = { 0.3f, 0.3f, 0.3f, 1.0f}; float diffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f}; float specular[]= { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,ambient); glMaterialfv(GL_FRONT,GL_DIFFUSE,diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,specular); glMaterialf(GL_FRONT,GL_SHININESS,100); glPushMatrix(); glTranslatef(pos[0], pos[1], pos[2]); glRotatef(angle[2], 0.0f, 0.0f, 1.0f);//z軸回転 glRotatef(angle[1], 0.0f, 1.0f, 0.0f);//y軸回転 glRotatef(angle[0], 1.0f, 0.0f, 0.0f);//x軸回転 glScalef(scale[0], scale[1], scale[2]); glutSolidSphere(0.2, 20, 20); glPopMatrix(); } void display(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(90.0, 1.0, 0.1, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // オブジェクトから見たシーンをテクスチャに利用 for (int i = 0; i 6; ++i){ // ビューポートをテクスチャのサイズに設定する glViewport(target[i].x, target[i].y, TEX_WIDTH, TEX_HEIGHT); // オブジェクト中心から見えるものをレンダリング glPushMatrix(); gluLookAt(pos[0], pos[1], pos[2], pos[0]+target[i].cx, pos[1]+target[i].cy, pos[2]+target[i].cz, target[i].ux, target[i].uy, target[i].uz); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); model- Draw(); glTranslatef(0.0, 1.0, 0.0); glPopMatrix(); // レンダリングした画像をテクスチャメモリに転送 glCopyTexSubImage2D(target[i].name, 0, 0, 0, target[i].x, target[i].y, TEX_WIDTH, TEX_HEIGHT); } glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); resize(width, height); glsl.ON(); GLint refLoc = glGetUniformLocation(glsl.ShaderProg, reflectivity ); glUniform1f(refLoc, reflectivity0); float m[16] ; glGetFloatv(GL_MODELVIEW_MATRIX, m); GLint ViewTransLoc = glGetUniformLocation(glsl.ShaderProg, ViewTranspose ); glUniformMatrix4fv(ViewTransLoc, 1, GL_TRUE, m); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); //fragment shaderのユニフォーム変数texのインデックスを取得 GLint samplerLoc = glGetUniformLocation(glsl.ShaderProg, sampler ); glUniform1i(samplerLoc, 0); draw(); glsl.OFF(); model- Draw(); glutSwapBuffers(); } void setLight() { float lightAmbient0[] = {0.8f, 0.8f, 0.8f, 1.0f}; //環境光 float lightDiffuse0[] = {1.0f, 1.0f, 1.0f, 1.0f}; //拡散光 float lightSpecular0[] = {1.0f, 1.0f, 1.0f, 1.0f};//鏡面光 glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient0); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse0); glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular0); glLightfv(GL_LIGHT0, GL_POSITION, lightPos); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); } void mouse(int button, int state, int x, int y){ float pp = PAI / 180.0f; if(button == GLUT_LEFT_BUTTON state == GLUT_DOWN){ xStart = x; yStart = y; flagMouse = true; }else if(button == GLUT_RIGHT_BUTTON state == GLUT_DOWN){ if(x width/4 x 3*width/4 y height/4 y 3*height/4){ }else if(( x width/4 || x 3*width/4) (y height/4 y 3*height/4)){ if(x width/4 ) view.phi -= 1.0; else view.phi += 1.0; view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.phi) * cos(pp * view.theta); view.cnt[0] = view.pos[0] - view.dist * sin(pp * view.phi) * cos(pp * view.theta); }else if((x width/4 x 3*width/4) (y height/4 || y 3*height/4)){ if( y height/4){ view.theta += 1.0; }else{ view.theta -= 1.0; } view.cnt[2] = view.pos[2] - view.dist * cos(pp * view.theta) * cos(pp * view.phi); view.cnt[0] = view.pos[0] - view.dist * cos(pp * view.theta) * sin(pp * view.phi); view.cnt[1] = view.pos[1] - view.dist * sin(pp * view.theta); }else if(x width/8 y 7*height/8) view.fovY -= 1.0;//zoom in else if(x 7*width/8 y 7*height/8) view.fovY += 1.0;//zoom out }else flagMouse = false; if(state == GLUT_DOWN) setCamera(); } void motion(int x, int y){ if(!flagMouse) return; if(cos(PAI * view.theta /180.0f) = 0.0f){ view.phi -= 0.5f * (float)(x - xStart) ;//tumble }else{ view.phi += 0.5f * (float)(x - xStart) ;//tumble } view.theta += 0.5f * (float)(y - yStart) ;//crane setCamera(); xStart = x; yStart = y; } void Init(void){ //背景色 glClearColor(0.2f, 0.2f, 0.3f, 1.0f); setCamera();//視点を求める setLight(); //光源設定 glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); //テクスチャの設定 setCubeMap(); glsl.InitGLSL( vertex.shader , flagment.shader ); model = new MODEL( room.x ,1); } void idle(void){ glutPostRedisplay(); } void main(int argc, char *argv[]){ glutInitWindowPosition(100, 100); glutInitWindowSize(640, 480); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( 環境マッピング ); glutDisplayFunc(display); glutIdleFunc(idle); glutMouseFunc(mouse); glutMotionFunc(motion); glutReshapeFunc(resize); Init(); glutMainLoop(); return; }
https://w.atwiki.jp/kumoami/pages/12.html
Google 〝Google Docsの3D版〟、製造業向け立体ドキュメンテーションSaaS「Scene」が正式ローンチ - THE BRIDGE,Inc. / 株式会社THE BRIDGE 【11月更新】2021年度オンライン/オフライン展示会・イベント一覧を無料公開!BtoBマーケティング施策の検討に役立つGoogleスプレッドシート/株式会社FLUED - PR TIMES リンクルがGoogle主催「Premier Partner Awards2021」にて「見込み顧客の獲得」「アカウントチーム」の2部門で最優秀賞を受賞しました - PR TIMES 焦るクアルコム チップ自社開発のGoogleなどと競合へ - 日本経済新聞 パズルRPG「Elemental of Dryad」がGoogle Playで配信開始 - 4Gamer.net 「楽天スーパーSALE」、先着20,000名にGoogle Play ギフトコード5%OFFクーポンを配布するキャンペーン開催!(Impress Watch) - Yahoo!ニュース - Yahoo!ニュース Google、DevSummit 21で大画面Androidデバイスのサポートを発表 - InfoQ Japan Google、メディアリテラシー向上における無料講座と啓発コンテンツを公開 はじめしゃちょーなどYouTubeクリエイターも参加(AMP[アンプ]) - Yahoo!ニュース - Yahoo!ニュース 『サムスピ』など名作がスマホで楽しめる!iOS/Androidで『アケアカNEOGEO』シリーズが配信(アスキー) - Yahoo!ニュース - Yahoo!ニュース Google Cloudとクアルコム、ニューラルネットワーキング分野などで協業へ(ZDNet Japan) - Yahoo!ニュース - Yahoo!ニュース 【外食業界向け 】Googleマイビジネス × CRMシステム活用法セミナー ~新規集客とリピーター獲得の最大化方法を徹底解説~ 2021年12月15日:時事ドットコム - 時事通信 【11月度版】Googleアルゴリズムアップデートレポート(全38ページ)を公開 - PR TIMES 検索結果の精度を上げる! 覚えておきたいGoogle 検索の「4つのテクニック」 - WIRED.jp GoogleスプレッドシートのAPI化サービス「SSSAPI」正式版をリリース - PR TIMES 今、求められるエンジニア像!Google提唱の「SRE」実践の第一歩を踏み出す方法 - ZDNet Japan Google Chrome「開きすぎたタブ」の管理に役立つ拡張機能6つ(ライフハッカー[日本版]) - Yahoo!ニュース - Yahoo!ニュース Googleマイビジネスが「Google ビジネスプロフィール」に名称変更など「注目のローカルSEOニュース」【2021年10月版】 - ネットショップ担当者フォーラム 「日本語音声自動文字起こし」が実用的 Pixel 6とGroup Transcribeを比較 - impress.co.jp Googleサービスから脱却したChromiumベースのウェブブラウザ「ungoogled-chromium」 - GIGAZINE 「Google Play ベスト オブ 2021」発表。ゲームは「ウマ娘」アプリは「ピッコマ」 - Engadget 日本版 ソニー WF-1000XM4などが来週からiOSでGoogleアシスタント利用不可 - iPhone Mania ボルボ日本法人の新社長インタビュー「ボルボC40は新しい時代の始まり」(Pen Online) - Yahoo!ニュース - Yahoo!ニュース Apple、Google、Samsungのフラッグシップ機のカメラ性能を徹底比較 - iPhone Mania バンナム、新作『機動戦士ガンダム UC ENGAGE』をApp Store、Google Playにてサービス開始! 無料ゲームランキングで1位を獲得 | gamebiz - SocialGameInfo 「Google Play」のアプリからマルウェア、30万台以上に感染(ZDNet Japan) - Yahoo!ニュース - Yahoo!ニュース 『ウマ娘』“Google Play ベストオブ 2021”3部門受賞記念でジュエル1500個配布 - 電撃オンライン Google元社員が「Don t Be Evil」を守ってクビになったと主張 - GIGAZINE 【2021-2022年秋冬モデル】Xperia 5 III/Google Pixel 6/AQUOS sense6などが人気に!ドコモ・au・ソフトバンクの最新機種をアンケート調査 - PR TIMES FINONより新作スマホケース「Google Pixel 6」対応スマホケースの発売のお知らせ‼【ハイブリッドケース】 - valuepress AppleやGoogle規制する一大法案、成立の遅延にEU委員が苛立ち - iPhone Mania 三菱重工がGoogle「Vertex AI」を選んだ理由 航空機製造でどう使っているのか - TechTargetジャパン EasyMailはGoogleフォームの使い方をお問い合わせフォームやアンケートフォームなどで解説します! - CNET Japan Google Pixel 6/6 Pro をiPhoneユーザーが試してみた(FUNQ) - Yahoo!ニュース - Yahoo!ニュース 2021年のブラックフライデー関連セールまとめ――AmazonやGoogle、au、ワイモバイルなどでセール開催 - ケータイ Watch Googleも参入断念 「折り畳みスマホ」独壇場のサムスンが次につくるものとは?(リアルサウンド) - Yahoo!ニュース - Yahoo!ニュース 「マルチクラウド」の準備足りないデジタル庁、AWS・Google以外の選択肢は増えるか - ITpro メジャーリーグが「AWS」ではなく「GCP」を使う理由 - TechTargetジャパン 【特報】Google Pixel 6が「回線契約なしでも割引」で販売中、発売1ヶ月でいきなり値下げ (2021年11月28日) - エキサイトニュース Google、「プライバシーサンドボックス」で独立監視者任命を約束(ITmedia NEWS) - Yahoo!ニュース - Yahoo!ニュース 【9割の人が知らない Google の使い方】クラウドのプロが教える「ビジネスチャットでしてはいけない」3つのこと(ダイヤモンド・オンライン) - Yahoo!ニュース - Yahoo!ニュース 「OK Google」から始まる新たなカーライフ!ボルボ「XC60」は各種機能をAndroidで操作(&GP) - Yahoo!ニュース - Yahoo!ニュース タチコマのように並列化し進化する、 Google親会社の日常家事ロボット - ITmedia NEWS Twitter、LINEにGoogle、Microsoft…あなたの「アカウント」大丈夫? 月イチでチェックしたいセキュリティ項目 - 文春オンライン ロシア政府がアップル・メタ・GoogleなどIT大手に現地オフィス開設を要求、違法な情報に対するアクセス制限への同意も - TechCrunch Japan Gmailから名刺発注。Sansan名刺メーカーがGoogle Workspace対応 - impress.co.jp Googleのブラックフライデーセールがスタート、Nestシリーズ割引やPixelシリーズ下取りキャンペーンなど(Impress Watch) - Yahoo!ニュース - Yahoo!ニュース Google×がん研有明病院 AI活用 乳がんマンモ検診研究でタッグ(日本テレビ系(NNN)) - Yahoo!ニュース - Yahoo!ニュース 年間トップWebサイトはGoogle・Amazon・楽天が3強、シニア層でもスマホアプリの利用が加速|ECのミカタ - ECのミカタ サイバーセキュリティクラウドとアイレットがGoogle Cloud Armor に対応したWAF自動運用サービス「WafCharm for Google Cloud」の販売代理店契約を締結 - PR TIMES Google翻訳よりも高性能? AI翻訳「DeepL」の驚異的な実力(現代ビジネス) - Yahoo!ニュース - Yahoo!ニュース AnyMind Group、Google社が主催する「GCPP Summit」において世界54社の中から2社のみに贈られる「The Innovation Award」を受賞 - PR TIMES Google Storeブラックフライデーセール明日11月25日開催!PixelシリーズやGoogle Nest Hubなどがお得に - GetNavi web グーグル、EUの違約金3145億円のGoogleショッピング独占禁止決定を覆せず - TechCrunch Japan Google Chrome活用で作業効率を飛躍的に上げる7つのヒント(ライフハッカー[日本版]) - Yahoo!ニュース - Yahoo!ニュース 「GoogleではなくAmazonで検索」して購入するネット通販ユーザーは約9割【アマゾン消費の最新情報】(ネットショップ担当者フォーラム) - Yahoo!ニュース - Yahoo!ニュース
https://w.atwiki.jp/warband/pages/456.html
fac_no_faction|No Faction fac_commoners|Commoners fac_outlaws|Outlaws fac_neutral|Neutral fac_innocents|Innocents fac_merchants|Merchants fac_culture_britton|Brittonic fac_culture_britton_rom|Briton Romano fac_culture_north_britton|Northern Briton fac_culture_angle|Angle fac_culture_jute|Jutes fac_culture_saxon|Saxon fac_culture_pic|Pictish fac_culture_scotti|Scotti fac_culture_irish|Goidelic fac_culture_frank|Frank fac_culture_roman|Roman fac_player_faction|Player Faction fac_player_supporters_faction|Player's Supporters fac_kingdom_1|Kingdom of Camelot fac_kingdom_2|Kingdom of Gwent fac_kingdom_3|Kingdom of Sussex fac_kingdom_4|Kingdom of the Britons fac_kingdom_5|Kingdom of Powys fac_kingdom_6|Kingdom of Gwynedd fac_kingdom_7|Kingdom of Dumnonia fac_kingdom_8|Dyfed fac_kingdom_9|Glywyssing fac_kingdom_10|Brycheiniog fac_kingdom_11|The Kingdom of Cornubia fac_kingdom_12|Lyonesse fac_kingdom_13|Middelseaxan fac_kingdom_14|Kingdom of Kent fac_kingdom_15|Caer Colun fac_kingdom_16|Caer Celemion fac_kingdom_17|Gewissae fac_kingdom_18|Cair Guinntguic fac_kingdom_19|Kingdom of Cynwidion fac_kingdom_20|Kingdom of Elmet fac_kingdom_21|Kingdom of Pennines fac_kingdom_22|Kingdom of Rheged fac_kingdom_23|Kingdom of Ebrauc fac_kingdom_24|Kingdom of Linnuis fac_kingdom_25|East Angles fac_kingdom_26|Bryneich fac_kingdom_27|Ceredigion fac_kingdom_28|Irish Raiders fac_kingdom_29|Galwyddel fac_kingdom_31|Alt Clut fac_kingdom_32|Dal Riada fac_kingdom_33|Pictland fac_kingdom_34|Kingdom of Mumain fac_kingdom_35|Kingdom of Connacht fac_kingdom_36|Kingdom of Ailech fac_kingdom_37|Kingdom of Tyrone fac_kingdom_38|Kingdom of Ulaid fac_kingdom_39|Kingdom of Laigin fac_kingdom_40|Kingdom of Cornouaille fac_kingdom_41|Veneti fac_kingdom_42|Tregor fac_kingdom_43|Celmans fac_kingdom_44|Salian Franks fac_kingdom_45|Kingdom of Francia fac_kingdom_46|Kingdom of Visigoths fac_kingdom_47|Germanic Franks fac_kingdom_48|Ripuarian Franks fac_kingdom_49|Kingdom of Burgundians fac_kingdom_50|Alemanni fac_kingdom_51|Frisia fac_kingdom_52|Iclingas fac_rebel_peasants|Rebel Peasants fac_rebel_peasants_2|Rebel Peasants fac_rebel_peasants_3|Rebel Peasants fac_civil_war|Rebel Nobles fac_rome|Roman Empire fac_christians|Christians fac_pagans|Pagans fac_manhunters|Manhunters fac_deserters|Deserters fac_mountain_bandits|Mountain Bandits fac_forest_bandits|Forest Bandits fac_adventurers|Adventurers
https://w.atwiki.jp/nigamushi/pages/38.html
SPRITEコマンド コマンド 構文 SPRITE SPRITE Sprite Number, XPos, YPos, Image Number SET SPRITE SET SPRITE Sprite Number, Backsave, Transparency DELETE SPRITE DELETE SPRITE Sprite Number CLONE SPRITE CLONE SPRITE Sprite Number, Destination Sprite Number SHOW SPRITE SHOW SPRITE Sprite Number HIDE SPRITE HIDE SPRITE Sprite Number HIDE ALL SPRITES HIDE ALL SPRITES SHOW ALL SPRITES SHOW ALL SPRITES MOVE SPRITE MOVE SPRITE Sprite Number, Velocity OFFSET SPRITE OFFSET SPRITE Sprite Number, XOffset, YOffset SCALE SPRITE SCALE SPRITE Sprite Number, Scale SIZE SPRITE SIZE SPRITE Sprite Number, XSize, YSize STRETCH SPRITE STRETCH SPRITE Sprite Number, XScale, YScale ROTATE SPRITE ROTATE SPRITE Sprite Number, Angle FLIP SPRITE FLIP SPRITE Sprite Number MIRROR SPRITE MIRROR SPRITE Sprite Number PASTE SPRITE PASTE SPRITE Sprite Number, XPos, YPos CREATE ANIMATED SPRITE CREATE ANIMATED SPRITE Sprite Number, Filename, Across, Down, Image Number PLAY SPRITE PLAY SPRITE Sprite Number, Start Frame, End Frame, Delay Value SET SPRITE FRAME SET SPRITE FRAME Sprite Number, Frame Value SET SPRITE PRIORITY SET SPRITE PRIORITY Sprite Number, Priority SET SPRITE IMAGE SET SPRITE IMAGE Sprite Number, Image Number SET SPRITE ALPHA SET SPRITE ALPHA Sprite Number, Alpha Value SET SPRITE DIFFUSE SET SPRITE DIFFUSE Sprite Number, Red Value, Green Value, Blue Value SET SPRITE TEXTURE COORD SET SPRITE TEXTURE COORD Sprite Number, Vertex Index, UValue, VValue SPRITE EXIST Return Integer=SPRITE EXIST(Sprite Number) SPRITE X Return Integer=SPRITE X(Sprite Number) SPRITE Y Return Integer=SPRITE Y(Sprite Number) SPRITE OFFSET X Return Integer=SPRITE OFFSET X(Sprite Number) SPRITE OFFSET Y Return Integer=SPRITE OFFSET Y(Sprite Number) SPRITE SCALE X Return Integer=SPRITE SCALE X(Sprite Number) SPRITE SCALE Y Return Integer=SPRITE SCALE Y(Sprite Number) SPRITE WIDTH Return Integer=SPRITE WIDTH(Sprite Number) SPRITE HEIGHT Return Integer=SPRITE HEIGHT(Sprite Number) SPRITE IMAGE Return Integer=SPRITE IMAGE(Sprite Number) SPRITE MIRRORED Return Integer=SPRITE MIRRORED(Sprite Number) SPRITE FLIPPED Return Integer=SPRITE FLIPPED(Sprite Number) SPRITE HIT Return Integer=SPRITE HIT(Sprite Number, Target Sprite Number) SPRITE COLLISION Return Integer=SPRITE COLLISION(Sprite Number, Target Sprite Number) SPRITE ANGLE Return Float=SPRITE ANGLE(Sprite Number) SPRITE FRAME Return Integer=SPRITE FRAME(Sprite Number) SPRITE ALPHA Return Integer=SPRITE ALPHA(Sprite Number) SPRITE RED Return Integer=SPRITE RED(Sprite Number) SPRITE GREEN Return Integer=SPRITE GREEN(Sprite Number) SPRITE BLUE Return Integer=SPRITE BLUE(Sprite Number) SPRITE VISIBLE Return Integer=SPRITE VISIBLE(Sprite Number)
https://w.atwiki.jp/satoschi/pages/7839.html
マン語 |Austro-Asiatic languages|Mon-Khmer languages| 言語類型 現用言語 使用文字 type living language writing system ISO 639-3 【zng】 言語名別称 alternate names Ba’e / Ba e Chaman Lá Vàng Manbu Mang U Nieng Ó Xamang Xá Lá Vàng Xá Mang Xá Ó Xá 方言名 dialect names 参考文献 references WEB ISO 639-3 Registration Authority - SIL International the LINGUIST List Ethnologue
https://w.atwiki.jp/usonx/pages/21.html
VC++(MFC)とOpenGL MFCとOpenGLの親和性は高い。逆にMFCとDirectXの親和性は低く、現在のバージョンにおいて、MFC+DirectXの組み合わせは難しい。理由としては、そもそもDirectX自体がMFCを前提としなくなったこと。SampleからMFCtex(MFC+DirectXのサンプル)が消えている。MFCtexがあるバージョンは、DirectX9(2003)のようだが、探した限りではMicrosoft上には見当たらなかった(仮にあったとしてもVC++6のものとなる。VC++2005では、そのままコンパイルできない)。 OpenGLのインストール 1.GLUTのダウンロード 下記サイトから"glut-3.7.6-bin.zip"をダウンロードし、適当なフォルダに解凍する。 http //www.xmission.com/~nate/glut.html 2.ファイルのコピー 解凍したファイルを下記ディレクトリに移動する。フォルダ名は環境によって若干異なる。.hは、GLフォルダを作りその中に入れること。 glut.h → C \Program Files\Microsoft Visual Studio\VC98\Include\GL .lib → C \Program Files\Microsoft Visual Studio\VC98\Lib .dll → C \WINDOWS\SYSTEM32 MFC(ダイアログベース)+OpenGL プロジェクト名をhogeとすると、 1.ヘッダファイルの記述 クラスChogeDlgに以下includeを追加 \#include GL/glaux.h 2.メンバ変数の追加 クラスChogeDlgに以下変数を追加する CDC* m_pDC; HGLRC m_GLRC; 3.メンバ関数の追加 int ChogeDlg SetDCPixelFormat(HDC hdc) { static PIXELFORMATDESCRIPTOR pfd = { sizeof (PIXELFORMATDESCRIPTOR),// Size of this structure 1,// Version number PFD_DRAW_TO_WINDOW |// Flags PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA,// RGBA pixel values 24,// 24-bit color 0, 0, 0, 0, 0, 0,// Don t care about these 0, 0,// No alpha buffer 0, 0, 0, 0, 0,// No accumulation buffer 32,// 32-bit depth buffer 0,// No stencil buffer 0,// No auxiliary buffers PFD_MAIN_PLANE,// Layer type 0,// Reserved (must be 0) 0, 0, 0// No layer masks }; int nPixelFormat; nPixelFormat = ChoosePixelFormat (hdc, pfd); if (SetPixelFormat(hdc, nPixelFormat, pfd) == FALSE){ // SetPixelFormat error return FALSE ; } if (DescribePixelFormat(hdc, nPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), pfd) == 0) { // DescribePixelFormat error return FALSE ; } if (pfd.dwFlags PFD_NEED_PALETTE) { // Need palete ! } return TRUE ; } void ChogeDlg InitGL() { m_pDC = new CClientDC(this); // Get device context SetDCPixelFormat(m_pDC- m_hDC); // Set OpenGL pixel format m_GLRC = wglCreateContext (m_pDC- m_hDC); // Create rendering context wglMakeCurrent (m_pDC- m_hDC, m_GLRC); // Current context set glClearColor(0.0f, 0.0f, 0.5f, 1.0f); } void ChogeDlg DrawGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ; } BOOL ChogeDlg OnInitDialog() の return TRUE; の上に InitGL(); を追加する. ClassView@ChogeDlg→メッセージ で WM_DESTROY をダブルクリックし, OnDestroy を呼ぶ. void ChogeDlg OnDestroy() { CView OnDestroy(); // TODO この位置にメッセージ ハンドラ用のコードを追加してください wglMakeCurrent(NULL, NULL); // free current context wglDeleteContext(m_GLRC); // Delete rendering context delete m_pDC; // Release device context } OnPaint に以下の文を追加. void COpenGLTest2Dlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 描画用のデバイス コンテキスト SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // クライアントの矩形領域内の中央 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // アイコンを描画します。 dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); DrawGL(); //これを追加 SwapBuffers(m_pDC- m_hDC); //これを追加 } } Pictureコントロール上に描画するには、 ダイアログにピクチャボックスを設置する.(大きさは適当) ID→ID_PICT に書き換え,クラスウィザードで ID_PICT の変数を追加する. コントロールID タイプ メンバ IDC_PICT CStatic m_Pict InitGL() に一文を追加する. void COpenGLTest2Dlg InitGL() { m_pDC = new CClientDC(this); m_pDC- m_hDC = m_Pict.GetDC()- GetSafeHdc(); //これを追加 SetDCPixelFormat(m_pDC- m_hDC); m_GLRC = wglCreateContext (m_pDC- m_hDC); wglMakeCurrent (m_pDC- m_hDC, m_GLRC); glClearColor(0.0f, 0.0f, 0.5f, 1.0f); }
https://w.atwiki.jp/taka18r/pages/45.html
vol.3-3⑥Entanglement この場所を出て歩く道のことを考える 空はまだ早い夕方、雲の色を残して 隣の子供は同じ歌 もう三度も歌ってる 終わる言葉 思い出せず 最後だけずっと繰り返して 始めも終わりもいらなかった、きみの目がつぶやいた どんな記憶を探したら胸の奥へ届くのだろう 長すぎた、きみの言う日々は一夜の夢のようで 終わる言葉 信じられない 目覚めのときはまだ遠い 千の夜を消せないで まだここを立てない <千夜一夜> 文化の日。もともとは日本国憲法が公布された日、という話だ。でも、高校生にとっては「文化『祭』の日」というほうが身近。ニュースでやってたとおり「晴れの特異日」で、この年の11月3日も秋晴れだ。 自分の高校の文化祭も、もちろん同じ日だった。しかし、開催は土曜と日曜の2日間。 ぼくはクラスメートに頼み込んで、3日の土曜日は抜けさせてもらっていた(その分、日曜日はめいっぱいこき使われることになっていたが…)。 前日きた晶良からのメールには「昼ごろにきてね」とあった。遅めの朝ごはんを食べ、シャワーを浴びた。まじめ過ぎず、それでいて崩し過ぎない服装をして、神奈川の朝陽高等学校に向かった。 駅で晶良に「いま、着いたよ」とメールする。間をおかずに届いた返信メールを目にする前に、ぼくは見覚えのある女性に声をかけられた。 「お久しぶりね。私のこと、覚えてる?」 切れ長の目で見つめられると心臓の鼓動が速くなる。 「翔子さん、ですよね」 「そーよ。覚えていてくれて、ありがとう」 艶やかに微笑む大人の女性の顔にドギマギしてしまう。そんな態度の変化を気取られないように、ぼくはケータイのメールをチェックする。 「晶良から、でしょ? 私が連れていってあげるわ」 ケータイと翔子の顔を交互に見て、 「あっ、あの…、ありがとうございます」 と言うのが精いっぱいだった。素早く読んだ晶良のメールは「翔子が駅前にいるから、一緒にきてね」だった。 「私は就職組だし…、あんま、やることないんだ、3年の文化祭って」 「へぇ…、そーなんですか。翔子さん、頭、良さそうなのに」 「家庭の事情、ってヤツ。うちさ、母子家庭だから…。母さんには苦労かけたからね」 明るい表情で軽く話す翔子。そんな深刻なことを、さも当然のようにしゃべっている。 「やさしいんですね、翔子さんって」 感動を伝えたくて、わざと大げさに言う。翔子は意味深な微笑を浮かべてぼくに振り返って言った。 「そーでもないよ? フフフっ」 ドキっとする。晶良と同じ2つ上の女性だが、艶っぽさは比ではない。 (晶良さん…、しっかりしてるときの晶良さんと比べても全然おっとなだなぁ、翔子さんって) 「翔子さん、ほんとに晶良さんと同じ年ですか?」 冗談めかして言ってみる。と、 「あ~ら。私、そんなにふけて見える? っていうより、晶良が子供っぽすぎるのかな?」 そう返されて、ぼくは真剣に考えてしまった。 「う~ん。たしかに晶良さん、年上らしくないところあるし。でも、そこがかわいいっていうか」 声を出してのひとり言。翔子にはまる聞こえだ。くすくすと笑っていた翔子が、やがて声をたてて笑いだす。 「くっくっくっ、あは、はははは。…きみ、あはは、…カイトくん、面白すぎっ。あは、あはははは」 どうやらツボに入ってしまったみたいだ。そのツボがなんなのかわからない身としては困るしかない。そっぽを向いた顔を赤らめ、ぽりぽりと頭をかくしかない。 「あはは…、はぁ。さ、行きましょ。晶良が待ってるわよ」 「あ、はい。…あの、翔子さん、さっきの、そんなにおかしかったですか?」 ぼくの質問に翔子は足を止めて答えた。 「うふふ。晶良ときみ、お似合いよ。晶良がきみのこと、照れくさそうに話すのを思いだしたら、おかしっくって」 答えになっているような、いないような…。 「はあ…」 ぼくは首を傾げつつ、歩きだした翔子のあとを黙ってついていった。しばらく歩いたとき、翔子が振り返って、ぼくに聞いてくる。艶やかな長い黒髪が舞った。 「ねぇ、晶良のクラスの出しもの、なにか、聞いてる?」 「いえ。きてからのお楽しみ、ってメールには書いてあったんですが、なにやってるんですか?」 翔子はちょっと考え込んでから、 「それじゃあ、教えないほうがいいわね」 含み笑いをしながら言った。 学校に近づいているのだろう、徐々に道行く人が増えてきた。やがて校舎が見え、ほどなくして「朝陽高等学校 文化祭」と書かれたアーチのかかる校門をくぐった。 初めての文化祭。校内は祭りの賑わいであふれ、そこにいるだけで心が躍った。 きょろきょろと見まわしながらも、翔子の背中を常に視界に入れて校内を歩く。階段を上っているとき、 翔子が晶良と同じくらいの身長だと気がついた。 (翔子さん、大人っぽいっていうか、すごく落ち着いているから、大きく見えたんだな) じっくりと観察する。学校独特のにおいのなかで、翔子の『女』が香っていた。 翔子のことをずっと眺めていたら、何階まできたのかわからなくなってしまった。翔子が廊下のほうに曲がり、ある教室の前で止まって振り返った。ぼくの顔を見ながら指で「ここ」と合図している。 「え…っとぉ…、m、a、i、d、c、a、f、e…。メ、イ、ド…、メイドカフェぇぇえ!?」 ボー然とするぼくを見て、翔子はお腹に手をあて声を押し殺して笑っている。 (ぼくの高校でも喫茶店をやるクラスはあるけど…。晶良さん、メイドのコスチューム着るのかな!?) 見てみたい、と思った。翔子が手招きをしている。緊張した足を動かし、メイドカフェに入店した。 「お帰りなさいませ、ご主人さまぁ」 5~6名ほどの黄色い声が出迎えてくれる。そのなかから晶良の声を聞き分け、その声が発せられた方向を凝視する。頬を赤らめた晶良が上目づかいに視線を絡めてくる。 翔子のエスコートで暗黙の了解ができていたのだろう。かわいいメイドたちの列から晶良がすっと前に出て、ぼくたちを席に案内してくれる。椅子に座るなり、晶良が顔を寄せてきて、 「ちょ~恥ずかしいんだよね、このカッコ」 「よく似合ってる! すっごくかわいいっ」 小声でささやき合う2人に、翔子が咳払い一つして、 「メイドさん、私もお客さんなんですけど」 「あっ、翔子…、じゃなくって。ご主人さま、失礼いたしました。あの、ご注文は?」 マニュアルどおりにしゃべる晶良がおかしくて涙が出そうだ。それは翔子も同じだったようで、手で口を押さえ必死に笑いをこらえている。 「ぼくはアイスコーヒー。翔子さんは?」 「ロイヤルミルクティをくださいな」 「かしこまりました。しばらくお待ちください」 ペコリとお辞儀をした晶良は、大きくタメ息をついてからぼくに顔を寄せ、 「あと1時間で交代だから。学校、案内してあげるね」 小声で言ってウインクし厨房のほうに行ってしまった。晶良がいなくなって、 「あはははは。まったく、晶良のクラスも変なことするよね~。笑いをこらえるのって大変」 ぼくは晶良のメイド姿にあてられて少しぼんやりしていた。翔子に愛想笑いを返す。 「ほんとに、そうですね」 「きみ、コスプレも好きなの?」 いきなりの質問に、口まで運んだ水を吹きだしそうになる。 「ぶっ。え、翔子さん、な、なんて!?」 「コスプレ。好き?」 翔子にたたみかけられる。バカ正直に「したことはないけど、うん! 大好きっ!」と答えられるはずもない。 「え、いやぁ、あのぉ、そのぉ、う~ん、好き、かも」 口ごもり、つっかえながら答える。 「あの衣装ね~、自前だから。文化祭が終わったら、晶良はきみだけのメイド、かな」 ボンっと音をたてたんじゃないだろうか。爆発したように顔が熱くなるのがわかった。そこに、 「お待たせいたしました。アイスコーヒーとロイヤルミルクティでございます、ご主人さま」 うやうやしく頭を下げて飲み物をテーブルに並べる晶良。ぼくにウインクして 「あとで、ね。…ん~!? アンタ、顔、真っ赤だよ。どしたぁ?」 と話しかけてくる。答えられずに口をもごもごしていると、晶良は翔子に向かって、 「もう少し、コイツにつきあってあげてね。よろしく」 拝むように手を顔の前にもっていき頼んだ。翔子は晶良の目をまっすぐ見て、 「はいはい。晶良の大事な人だもんね。まっかせなさぁい」 ぽんっと胸をたたいた。 晶良が目の前からいなくなると、翔子は頬杖をつき謎めいた微笑みをぼくに向けてくる。影がありながら、とてもきれいな翔子の顔に、心臓の鼓動が大きくなった。 「これ…、きみでしょ?」 いきなり、だった。翔子は自分の携帯電話を出してボタンを操作。ある画像をディスプレイに写しだして、ぼくのほうにそれを向けた。 「! …」 息を飲み絶句した。驚きで言葉が出てこない。そこには…。 「私ねぇ。バイトしてたんだ、あの日、その場所で」 目の前の翔子がぐらりと歪む。息が苦しくなるほど動転していた。翔子の言葉が続く。 「相手は…晶良じゃないよね? ふふふ、浮気?」 「ち、ちがう…」 やっと声が出た。翔子はぼくの言葉を受け流し、 「見かけによらず悪い男のコ、なんだね。きみは」 「そんなこと!」 思わず声が大きくなってしまう。店内はそれなりに賑わっていて、だれも気にしていなかった。翔子は平然と言い放つ。 「そんなこと、なくはないよね。このあとの写真はないけど、私は全部見てたのよ」 また黙ってしまう。なにを言っても、もちろん無駄なのはすごくよくわかっていた。 「あの日、大さん橋で、きみは、この娘をやさしく抱いて…」 うつむいたぼくの目に飛び込んできたのは、したたり落ちる自分の汗だった。翔子の『証言』が続く。 「兄妹…、には見えなかったなぁ。もちろん姉弟にも、ね」 年からいったら姉弟なのだが…、そんなしようもないことが頭をかすめる。 「あの娘がだれか…、なんて私には興味はないわ」 顔を上げる。翔子の目をきっと見つめて、ようやく言葉が、意味を持つ言葉が出せた。 「その写真、晶良さんに見せるつもりですか?」 抵抗のできない獲物がじたばたと悪あがきをする、それが楽しくって仕方がない。翔子の顔はそう語っているかのようだ。 「ふふふ。そうね、どうしようかしら。晶良は私の大切な親友。できれば幸せになってほしいわ」 この場で土下座をしようか…。いや、そんな目立つことはできない。同じ教室には晶良だっている。きっと怪しまれる。真実は、言えない、言えっこない。 「そんなに怖い顔しないの。私はきみの敵ではないわ」 恐怖におののき、それが憎悪に変わっていた。微笑む翔子のきれいな顔が冷たく見えた。 「ぼくは…、どうすれば、いいんですか?」 その言葉を待っていたかのように、翔子の表情が変化する。 (獲物をがんじがらめにして、むさぼりつく瞬間の雌蜘蛛) 冷や汗とともに頭に浮かんだイメージだ。ぼくは蜘蛛の巣にかかった獲物…。 翔子は目だけで晶良の位置をうかがい、それからぼくの目を射抜くように見て言った。 「2時間後。校門のところで待ってるわ。もちろん、くるよね」 「あ、晶良さんは…」 「ふふ。それは大丈夫よ。晶良の次のシフトくらい頭に入ってるわ」 「それで…。それで、あの写真、消去してもらえるんですか?」 「それは、あなた次第。それじゃあ、2時間後にね」 そう言って翔子は、ロイヤルミルクティを一口だけ飲んでレシートをもって出て行ってしまった。 取り残されたぼくに、だれかが話しかけている。 「…ねぇ! こらっ」 思うように動かない首をなんとかまわし、声の主に顔を向ける。 「どーしたのよ? アタシさぁ、これから2時間、休憩だから。学校、案内してあげる」 メイドさんがご主人さまに命令してる、さぞや変な光景だろうな。 「あ、あぁ。うん。い、行こう、晶良さん」 なんとか平静を装おうとして、かえって声が裏返ってしまう。 「きょうのアンタ、変! さっきは真っ赤になってたし、いまは真っ青よ。体調、悪いの? 寝不足?」 お姉ちゃん気質を全開にして晶良が聞いてくる。 「いや、そんなことないよ。晶良さんが、その、あんまりかわいいからさ。ちょっと緊張してる」 2時間後になにが起こるのか、想像もつかない。いまはただ、目の前の晶良に気の利いた言い訳が言えたことにただホっとする。 「ばか…。いくわよっ」 顔を赤らめて言う晶良。なんとか急場はしのげたようだ。 「お腹、すいちゃったなぁ」 黙っているわけにはいかない。2時間後のことが気になって食欲どころではないが、晶良を安心させるために無理をする。 「そっか。じゃあ、テニス部の後輩がやってる模擬店、いってみようか」 階段を下りる晶良の背中が遠く感じられる。心の中で「ごめん」とつぶやいた。 「実はさぁ、アタシもお腹すいてたんだよねぇ。ホットケーキとかクレープ、食べたいな」 「お疲れさま。きょうは、ぼくがおごるよ」 罪の意識を少しでも軽減したい気持ちがそう言わせた。晶良は素直にうれしがる。 「やったぁ。…ほんとはね、年下に甘えちゃいけない、って思うんだけどさぁ。アンタにやさしくされるの好きだから…。ごちそうになるね」 人目も気にせず晶良は腕を組んできて言った。うれしくないわけはない。しかし、後輩の教室が近づいたら、晶良はすっとぼくから離れる。ぱぁっと晴れた気持ちに雲がかかる。 「ごめんね。やっぱり恥ずかしいから…」 「うん」 そう言ってくれる晶良の気使いがうれしい。だからこそ、浮気を「見られた」自分が情けなかった(勝手なもので、浮気をした自分、ではない…)。 いろいろ食べ、飲み、おしゃべりをしたが、全部うわの空。かろうじて晶良に怪しまれない程度に笑顔で会話できた。笑いは多少引きつり気味ではあったが。 あっという間に2時間がたった。この日の文化祭が終わってからの待ち合わせをして、晶良はメイドカフェに戻っていった。
https://w.atwiki.jp/doner/pages/18.html
戻る 窓だし 画像処理系画像表示 画像の操作 音関係 文字関係文字列を表示 文字列の操作 窓だし require mygame/boot Cで言うインクルード文です。これでMygameライブラリが使えるわけですが、 実はこれでウィンドウ(640×480)も生成されます 画像処理系 画像表示 Image.render("パス名", x = X座標, y = Y座標) TransparentsImage.render("パス名", x = X座標, y = Y座標) 画像ファイルを直接描画します。まあ、出すだけならこれで事足りるんですが Image.new("パス名", x = X座標, y = Y座標) TransparentsImage.new("パス名", x = X座標, y = Y座標) 画像ファイルをオブジェクト化します。画像を動かすならこちらを使うべし 例 img = Image.new("sample.bmp", x = 30, y = 150) img.render 補足:描画座標は画像の左上が基点です 画像の操作 img.x = X座標 img.y = Y座標 オブジェクトにすると、後付で描画座標を設定できます img.scase = 0以上の数値(小数も可) 初期値1.0 img.angle = 0~360の整数 初期値0 img.alpha = 0~256の整数 初期値256 それぞれ、画像を拡大・縮小して描画、(時計回りに)回転させて描画したり、透過度を変えて描画できたりもします (注)scaseとangleは、初期値以外を設定すると描画処理が遅くなったり、描画座標が画像の中央になったりするので注意しましょう 音関係 Wave.play("パス名",チャンネル番号,ループ回数) Wave.new("パス名",チャンネル番号,ループ回数) 音を再生するメソッドと、音楽ファイルをオブジェクト化するメソッドです チャンネル番号:省略または autoにすると、自動的に空いているチャンネルを使う ループ回数:省略すると1回だけ再生、 loopにすると無限回再生になる 例 sound = Wave.new("sample.wav", auto, loop) sound.play 補足:Mygameでは、チャンネルが16個用意されているので、理論上は16の音源ファイルを一度に再生できます(普通しないけど) 文字関係 文字列を表示 Font.render("文字列", x = X座標, y = Y座標) Font.new("文字列", x = X座標, y = Y座標) フォント(文字列)を表示するメソッド群です 例 fnt = Font.new("sample", x = 30, y = 150) fnt.render 文字列の操作 fnt.str = "文字列" 「str =」を使うと、fnt内の文字列を再設定できます fnt.color = [0~255の整数,左に同じ,左に同じ] 文字の色を設定します。ちなみに数値は左からRGBです fnt.size = 整数 フォントのサイズを設定します ShadowFont.render(new) フォントを影付きにします。それ以外の使い方は上記と同じです fnt.shadow_color = 以下略 影の色を設定します
https://w.atwiki.jp/chordprog/pages/75.html
あ WOW WAR TONIGHT~時には起こせよムーヴメント~ か GOING GOING HOME さ た な は ま や ら わ 数字記号