Приветствие - новичкам

дневник templar

Модераторы: Зеленк, Психиатры-психи

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

дневник templar

Сообщение Зеленк » 02.04.2009, 13:34

___http://krasnaya-zastava.ru/forum/viewtopic.php?t=5148&start=30

Теперь я буду вести свой дневник создания opeb source движка тут, потому что я на самом деле Тапл.., программист а не Стрекозец. Хотя кто знает. Вобще наверно больше бы подошел ник - Trailer
Изображение

Но такой ник и аватар я выбрал не случайно ибо Иисусова молитва Всегда защищает меня от сил зла.

Mirror
Старожил
Сообщения: 1780
Зарегистрирован: 27.06.2008, 10:55

Re: Дневник Templar

Сообщение Mirror » 02.04.2009, 14:27

а что за движок?
http://www.schiza.net - Форум больных шизофренией.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 02.04.2009, 14:43

Изображение
Ну обычный open source 3d движок для C++ типа irrlicht или ogre, но гораздо лучше, т.к. они слишком запутанные, мне самому больше всего просто бесплатные Blitz3D SDK(этот дешево стоит) или Dark GDK нравится я такого типа и делаю.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 03.04.2009, 18:27

Теперь что бы добавить физику PhysX не только для столкновения ландшафта с кубикам, а ещё 3d моделей с кубиками
Я решил соединить вот эти два куска кода посредством собственного класса CMeshBuilder

Код: Выделить всё

static void InitTerrain()
{
	// Initialize terrain vertices
	gTerrainVerts = new NxVec3[TERRAIN_NB_VERTS];
	for(NxU32 y=0;y<TERRAIN_SIZE;y++)
	{
		for(NxU32 x=0;x<TERRAIN_SIZE;x++)
		{
			NxVec3 v; 
			v.set(NxF32(x)-(NxF32(TERRAIN_SIZE-1)*0.5f), 0.0f, NxF32(y)-(NxF32(TERRAIN_SIZE-1)*0.5f));
			v *= TERRAIN_WIDTH;
			gTerrainVerts[x+y*TERRAIN_SIZE] = v;
		}
	}

	struct Local
	{
		static void _Compute(bool* done, NxVec3* field, NxU32 x0, NxU32 y0, NxU32 size, NxF32 value)
		{
			// Compute new size
			size>>=1;
			if(!size) return;

			// Compute new heights
			NxF32 v0 = value * trand();
			NxF32 v1 = value * trand();
			NxF32 v2 = value * trand();
			NxF32 v3 = value * trand();
			NxF32 v4 = value * trand();

			NxU32 x1 = (x0+size)		% TERRAIN_SIZE;
			NxU32 x2 = (x0+size+size)	% TERRAIN_SIZE;
			NxU32 y1 = (y0+size)		% TERRAIN_SIZE;
			NxU32 y2 = (y0+size+size)	% TERRAIN_SIZE;

			if(!done[x1 + y0*TERRAIN_SIZE])	field[x1 + y0*TERRAIN_SIZE].y = v0 + 0.5f * (field[x0 + y0*TERRAIN_SIZE].y + field[x2 + y0*TERRAIN_SIZE].y);
			if(!done[x0 + y1*TERRAIN_SIZE])	field[x0 + y1*TERRAIN_SIZE].y = v1 + 0.5f * (field[x0 + y0*TERRAIN_SIZE].y + field[x0 + y2*TERRAIN_SIZE].y);
			if(!done[x2 + y1*TERRAIN_SIZE])	field[x2 + y1*TERRAIN_SIZE].y = v2 + 0.5f * (field[x2 + y0*TERRAIN_SIZE].y + field[x2 + y2*TERRAIN_SIZE].y);
			if(!done[x1 + y2*TERRAIN_SIZE])	field[x1 + y2*TERRAIN_SIZE].y = v3 + 0.5f * (field[x0 + y2*TERRAIN_SIZE].y + field[x2 + y2*TERRAIN_SIZE].y);
			if(!done[x1 + y1*TERRAIN_SIZE])	field[x1 + y1*TERRAIN_SIZE].y = v4 + 0.5f * (field[x0 + y1*TERRAIN_SIZE].y + field[x2 + y1*TERRAIN_SIZE].y);

			done[x1 + y0*TERRAIN_SIZE] = true;
			done[x0 + y1*TERRAIN_SIZE] = true;
			done[x2 + y1*TERRAIN_SIZE] = true;
			done[x1 + y2*TERRAIN_SIZE] = true;
			done[x1 + y1*TERRAIN_SIZE] = true;

			// Recurse through 4 corners
			value *= 0.5f;
			_Compute(done, field, x0,	y0,	size, value);
			_Compute(done, field, x0,	y1,	size, value);
			_Compute(done, field, x1,	y0,	size, value);
			_Compute(done, field, x1,	y1,	size, value);
		}
	};

	// Fractalize
	bool* done = new bool[TERRAIN_NB_VERTS];
	memset(done,0,TERRAIN_NB_VERTS);
	gTerrainVerts[0].y = 10.0f;
	gTerrainVerts[TERRAIN_SIZE-1].y = 10.0f;
	gTerrainVerts[TERRAIN_SIZE*(TERRAIN_SIZE-1)].y = 10.0f;
	gTerrainVerts[TERRAIN_NB_VERTS-1].y = 10.0f;
	Local::_Compute(done, gTerrainVerts, 0, 0, TERRAIN_SIZE, TERRAIN_CHAOS);
	for(NxU32 i=0;i<TERRAIN_NB_VERTS;i++)	
		gTerrainVerts[i].y += TERRAIN_OFFSET;

	delete[] done;

	// Initialize terrain faces
	gTerrainFaces = new NxU32[TERRAIN_NB_FACES*3];

	NxU32 k = 0;
	for(NxU32 j=0;j<TERRAIN_SIZE-1;j++)
	{
		for(NxU32 i=0;i<TERRAIN_SIZE-1;i++)
		{
			// Create first triangle
			gTerrainFaces[k] = i   + j*TERRAIN_SIZE;
			gTerrainFaces[k+1] = i   + (j+1)*TERRAIN_SIZE;
			gTerrainFaces[k+2] = i+1 + (j+1)*TERRAIN_SIZE;

			//while we're at it do some smoothing of the random terrain because its too rough to do a good demo of this effect.
			smoothTriangle(gTerrainFaces[k],gTerrainFaces[k+1],gTerrainFaces[k+2]);
			k+=3;
			// Create second triangle
			gTerrainFaces[k] = i   + j*TERRAIN_SIZE;
			gTerrainFaces[k+1] = i+1 + (j+1)*TERRAIN_SIZE;
			gTerrainFaces[k+2] = i+1 + j*TERRAIN_SIZE;

			smoothTriangle(gTerrainFaces[k],gTerrainFaces[k+1],gTerrainFaces[k+2]);
			k+=3;
		}
	}

	//allocate terrain materials -- one for each face.
	gTerrainMaterials = new NxMaterialIndex[TERRAIN_NB_FACES];

	for(NxU32 f=0;f<TERRAIN_NB_FACES;f++)
		{
		//new: generate material indices for all the faces
		chooseTrigMaterial(f);
		}
	// Build vertex normals
	gTerrainNormals = new NxVec3[TERRAIN_NB_VERTS];
	NxBuildSmoothNormals(TERRAIN_NB_FACES, TERRAIN_NB_VERTS, gTerrainVerts, gTerrainFaces, NULL, gTerrainNormals, true);


	// Build physical model
	NxTriangleMeshDesc terrainDesc;
	terrainDesc.numVertices					= TERRAIN_NB_VERTS;
	terrainDesc.numTriangles				= TERRAIN_NB_FACES;
	terrainDesc.pointStrideBytes			= sizeof(NxVec3);
	terrainDesc.triangleStrideBytes			= 3*sizeof(NxU32);
	terrainDesc.points						= gTerrainVerts;
	terrainDesc.triangles					= gTerrainFaces;							
	terrainDesc.flags						= 0;
	//add the mesh material data:
	terrainDesc.materialIndexStride			= sizeof(NxMaterialIndex);
	terrainDesc.materialIndices				= gTerrainMaterials;

	terrainDesc.heightFieldVerticalAxis		= NX_Y;
	terrainDesc.heightFieldVerticalExtent	= -1000.0f;

	NxTriangleMeshShapeDesc terrainShapeDesc;
	terrainShapeDesc.shapeFlags |= NX_SF_FEATURE_INDICES;

	bool status = InitCooking();
	if (!status) {
		printf("Unable to initialize the cooking library. Please make sure that you have correctly installed the latest version of the AGEIA PhysX SDK.");
		exit(1);
	}

 	MemoryWriteBuffer buf;
  	status = CookTriangleMesh(terrainDesc, buf);
	if (!status) {
		printf("Unable to cook a triangle mesh.");
		exit(1);
	}
  	MemoryReadBuffer readBuffer(buf.data);
  	terrainShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(readBuffer);

	//
	// Please note about the created Triangle Mesh, user needs to release it when no one uses it to save memory. It can be detected
	// by API "meshData->getReferenceCount() == 0". And, the release API is "gPhysicsSDK->releaseTriangleMesh(*meshData);"
	//

	NxActorDesc ActorDesc;
	ActorDesc.shapes.pushBack(&terrainShapeDesc);
	gTerrain = gScene->createActor(ActorDesc);
	gMeshShape = (NxTriangleMeshShape*)gTerrain->getShapes()[0];
	gTerrain->userData = (void*)0;

	CloseCooking();
}

В этом больше всего кода занимает генерация ландшафта которая вобщем и не нужна для 3d модели

А этот примерно то чем я заменю но отдельно, генерацию ландшафта.

Код: Выделить всё

HRESULT SplitIntoSeperateTriangles( IDirect3DDevice9* pd3dDevice, ID3DXMesh* pInMesh, CDXUTXFileMesh* pOutMesh )
{
    HRESULT hr;
    DWORD dwNumFaces = pInMesh->GetNumFaces();
    DWORD dwOutNumVerts = dwNumFaces * 3;
    D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
    pInMesh->GetDeclaration( decl );

    ID3DXMesh* pNewMesh = NULL;
    hr = D3DXCreateMesh( dwNumFaces, dwOutNumVerts, D3DXMESH_32BIT | D3DXMESH_MANAGED, decl, pd3dDevice, &pNewMesh );
    if( FAILED( hr ) )
        return hr;

    WORD* pInIndexData;
    DWORD* pNewIndexData;
    DROID_VERTEX* pInVertexData;
    DROID_VERTEX* pNewVertexData;
    DWORD* pInAttribData;
    DWORD* pNewAttribData;
    pInMesh->LockAttributeBuffer( D3DLOCK_READONLY, ( DWORD** )&pInAttribData );
    pInMesh->LockVertexBuffer( D3DLOCK_READONLY, ( VOID** )&pInVertexData );
    pInMesh->LockIndexBuffer( D3DLOCK_READONLY, ( VOID** )&pInIndexData );
    {
        pNewMesh->LockAttributeBuffer( 0, ( DWORD** )&pNewAttribData );
        pNewMesh->LockIndexBuffer( 0, ( VOID** )&pNewIndexData );
        pNewMesh->LockVertexBuffer( 0, ( VOID** )&pNewVertexData );
        for( DWORD iFace = 0; iFace < dwNumFaces; iFace++ )
        {
            DWORD iV1 = pInIndexData[ iFace * 3 + 0 ];
            DWORD iV2 = pInIndexData[ iFace * 3 + 1 ];
            DWORD iV3 = pInIndexData[ iFace * 3 + 2 ];

            pNewAttribData[ iFace ] = 0;

            D3DXVECTOR3 vA = pInVertexData[ iV1 ].pos - pInVertexData[ iV2 ].pos;
            D3DXVECTOR3 vB = pInVertexData[ iV1 ].pos - pInVertexData[ iV3 ].pos;
            D3DXVECTOR3 vFaceNormal;
            D3DXVec3Cross( &vFaceNormal, &vA, &vB );
            D3DXVec3Normalize( &vFaceNormal, &vFaceNormal );

            pNewIndexData[ iFace * 3 + 0 ] = iFace * 3 + 0;
            pNewVertexData[ iFace * 3 + 0 ].pos = pInVertexData[ iV1 ].pos;
            pNewVertexData[ iFace * 3 + 0 ].normal = vFaceNormal; // pInVertexData[ iV1 ].normal;
            pNewVertexData[ iFace * 3 + 0 ].uv = pInVertexData[ iV1 ].uv;

            pNewIndexData[ iFace * 3 + 1 ] = iFace * 3 + 1;
            pNewVertexData[ iFace * 3 + 1 ].pos = pInVertexData[ iV2 ].pos;
            pNewVertexData[ iFace * 3 + 1 ].normal = vFaceNormal; // pInVertexData[ iV2 ].normal;
            pNewVertexData[ iFace * 3 + 1 ].uv = pInVertexData[ iV2 ].uv;

            pNewIndexData[ iFace * 3 + 2 ] = iFace * 3 + 2;
            pNewVertexData[ iFace * 3 + 2 ].pos = pInVertexData[ iV3 ].pos;
            pNewVertexData[ iFace * 3 + 2 ].normal = vFaceNormal; // pInVertexData[ iV3 ].normal;
            pNewVertexData[ iFace * 3 + 2 ].uv = pInVertexData[ iV3 ].uv;
        }
        pNewMesh->UnlockIndexBuffer();
        pNewMesh->UnlockVertexBuffer();
        pNewMesh->UnlockAttributeBuffer();
    }
    pInMesh->UnlockAttributeBuffer();
    pInMesh->UnlockVertexBuffer();
    pInMesh->UnlockIndexBuffer();

    DWORD dwMaterials = 1;
    D3DXMATERIAL d3dxMaterials[1];
    d3dxMaterials[0].MatD3D = g_Render.meshDroid.m_pMaterials[0];
    d3dxMaterials[0].pTextureFilename = "media\\droid\\EvilDrone_Diff.jpg";

    hr = pOutMesh->Create( pd3dDevice, pNewMesh, d3dxMaterials, dwMaterials );
    SAFE_RELEASE( pNewMesh );

    return hr;
}

tikshoret
Сообщения: 72
Зарегистрирован: 02.04.2009, 08:27

Re: Дневник Templar

Сообщение tikshoret » 04.04.2009, 01:50

Ничего себе, ты шаришь в программировании?
У одного священика спросили: Бог нам дает болезни в наказание?- На что он ответил: Что Вы, Бог нас любит и дает болезни нам в помощь!

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 04.04.2009, 14:54

tikshoret писал(а):Ничего себе, ты шаришь в программировании?
Ага.

Вторую функцию уже переделал для класса CMeshBuilder

Код: Выделить всё

HRESULT LoadFromCXFMesh(CXFMesh *pCMesh)
{
	ID3DXMesh* pInMesh=pCMesh->xfMesh.GetMesh();

    numF = pInMesh->GetNumFaces();
    numI = numF * 3;
	numV = pInMesh->GetNumVertices();

	tempV=new CVertex[numV];
	tempI=new DWORD[numI];

    WORD* pInIndexData;
    CVertex* pInVertexData;
    DWORD* pInAttribData;
    pInMesh->LockAttributeBuffer( D3DLOCK_READONLY, ( DWORD** )&pInAttribData );
    pInMesh->LockVertexBuffer( D3DLOCK_READONLY, ( VOID** )&pInVertexData );
    pInMesh->LockIndexBuffer( D3DLOCK_READONLY, ( VOID** )&pInIndexData );
    {
        for( DWORD iFace = 0; iFace < numF; iFace++ )
        {
            DWORD iV0 = pInIndexData[ iFace * 3 + 0 ];
            DWORD iV1 = pInIndexData[ iFace * 3 + 1 ];
            DWORD iV2 = pInIndexData[ iFace * 3 + 2 ];

			tempI[ iFace * 3 + 0 ]=iV0;
			tempI[ iFace * 3 + 1 ]=iV1;
			tempI[ iFace * 3 + 2 ]=iV2;

			tempV[iV0].pos = pInVertexData[ iV0 ].pos;
			tempV[iV1].pos = pInVertexData[ iV1 ].pos;
			tempV[iV2].pos = pInVertexData[ iV2 ].pos;
        }
    }
    pInMesh->UnlockAttributeBuffer();
    pInMesh->UnlockVertexBuffer();
    pInMesh->UnlockIndexBuffer();


    return S_OK;
}
для использования моделей в OpenGL это тоже пригодится
теперь буду добавлять в него первую для PhysX

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 06.04.2009, 14:08

Вот так я переделал функцию инициализации ландшафта. Кстати, я выкладываю код который я уже проверял на работоспособность.

Код: Выделить всё

NxTriangleMeshShapeDesc pxMeshShapeDesc;

HRESULT BuildPXMesh()
{
	NxMaterialIndex *pMaterials = new NxMaterialIndex[numF];
	for(NxU32 f=0;f<(NxU32)numF;f++)
		pMaterials[f]=materialRock;

	NxVec3* pVerts = new NxVec3[numV];
	for(NxU32 v=0;v<(NxU32)numV;v++)
		pVerts[v]=(NxVec3)tempV[v].pos;

	// Build physical model
	NxTriangleMeshDesc pxMeshDesc;
	pxMeshDesc.numVertices					= numV;
	pxMeshDesc.numTriangles				= numF;
	pxMeshDesc.pointStrideBytes			= sizeof(NxVec3);
	pxMeshDesc.triangleStrideBytes			= 3*sizeof(NxU32);
	pxMeshDesc.points						= pVerts;
	pxMeshDesc.triangles					= tempI;							
	pxMeshDesc.flags						= 0;
	//add the mesh material data:
	pxMeshDesc.materialIndexStride			= sizeof(NxMaterialIndex);
	pxMeshDesc.materialIndices				= pMaterials;

	//pxMeshDesc.heightFieldVerticalAxis		= NX_Y;
	//pxMeshDesc.heightFieldVerticalExtent	= -1000.0f;


	//////
	pxMeshShapeDesc.shapeFlags |= NX_SF_FEATURE_INDICES;

	bool status = InitCooking(); if (!status) { printf("Unable to initialize the cooking library. Please make sure that you have correctly installed the latest version of the AGEIA PhysX SDK."); exit(1); }

 	MemoryWriteBuffer buf;
  	status = CookTriangleMesh(pxMeshDesc, buf); if (!status) { printf("Unable to cook a triangle mesh."); exit(1); }
  	MemoryReadBuffer readBuffer(buf.data);
  	
	pxMeshShapeDesc.meshData = gPhysicsSDK->createTriangleMesh(readBuffer);

	//
	// Please note about the created Triangle Mesh, user needs to release it when no one uses it to save memory. It can be detected
	// by API "meshData->getReferenceCount() == 0". And, the release API is "gPhysicsSDK->releaseTriangleMesh(*meshData);"
	//

	CloseCooking();

	return S_OK;
}
и это как сейчас выглядит сам класс CMeshBuilder

Код: Выделить всё

#include "CMeshBuilder_BuildDXMesh.h"
#include "DXDrawMesh.h"

class CMeshBuilder : public CMesh
{
public:
	CVertex *tempV;
	DWORD *tempI;
	int numV, numI, numF;

	#include "CMeshBuilder_LoadFromCXFMesh.h"
	#include "CMeshBuilder_BuildPXMesh.h"
	void Init(int tempSize)
	{
		tempV=new CVertex[tempSize];
		tempI=new DWORD[tempSize];
		numI=0; numV=0;
	}

	void Init(CXFMesh *pMesh)
	{
		LoadFromCXFMesh(pMesh);
	}
//------------------------------------
	void AddVertex(CVertex v)
	{
		tempV[numI]=v;
		tempI[numI]=numI; numI++; numV++;
	}

	void AddQuad(CVertex v0, CVertex v1, CVertex v2, CVertex v3)
	{
		//12
		//03
		AddVertex(v0); AddVertex(v1); AddVertex(v2);
		AddVertex(v0); AddVertex(v2); AddVertex(v3);
	}

//------------------------
	HRESULT Build()
	{
		HRESULT hr;
		V_RETURN( BuildDXMesh(&pMesh, tempV, tempI, numV, numI, g_aVertDecl) );
		//D3DXComputeNormals(pMesh, 0);
		return S_OK;
	}
	void EndBuild()
	{
		delete [] tempV;
		delete [] tempI;
	}


	void Scale(float x, float y, float z)
	{
		for(int v=0; v<numV; v++)
		{
			tempV[v].pos.x*=x;
			tempV[v].pos.y*=y;
			tempV[v].pos.z*=z;
		}
	}
};

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 10.04.2009, 09:37

скриншот с физикой
Изображение
теперь можно чтонибудь более вразумительно выглядящее делать

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 11.04.2009, 00:43

Ну вот и все, Аллилуйя, Иисус совсем не в восторге от моего public programming значит можно и даже нужно дальше не продолжать(для public в любых отношениях включая коммерческие проекты.)

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 15.04.2009, 00:20

Я думаю если я покрещущь в православного тамплиера, то Бог сможет мне прямо запретить а если не запретит то значит можно будет продолжать дальше. Без крещения мне не известно, нарушение ли(программирование почти без образования плюс с шизофренией) это воли атеистов. Пока я буду делать эмулятор OpenGL на DirectX это упростит создание движка, сразу для двух этих библиотек.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 21.05.2009, 15:32

Наверно скоро я продолжу тут дальше делать свою opensource игру. Но только тут, т.к. в интернете мне больше нигде не хочется её делать.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 22.05.2009, 10:46

Самая интересная игра это создание игр, сделать такую невозможно , упрощенный и более неинтересный вариант сделали thegamecreators.com.

К сожалению делать то что хочется больше всего 3d rpg про зомби(не re а land of the dead) нельзя, потому что больше чем полтора часа таких сомнительных удовольствий становятся слишком вредными для психики. И rpg в полтора часа увы никак не уложишь.

Для меня самый простой выход из этой ситуации заменить зомби на коробки как в этой игре pipkin.ru/swf/1635/

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 22.05.2009, 19:06

Как начал делать, возникла какая-то психическая и даже вроде физическая неприязнь к своим действиям в этом направлении, и как только другие умудряются. Про зомби ничего не получится.
Про что-то другое неизвестно сколько времени буду придумывать.

NEO-Vovan85
Старожил
Сообщения: 1899
Зарегистрирован: 01.09.2008, 19:33

Re: Дневник Templar

Сообщение NEO-Vovan85 » 22.05.2009, 20:11

сделай похожей в плане стиля на Painkiller
С НАМИ БОГ!
ЗНАЧИТ ВРАГ БУДЕТ ПОВЕРЖЕН
25\17

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 22.05.2009, 21:23

Типа Painkiller уже сделали NecroVision(жуткое какое название), я играл в демку мне понравилась вобщем как и Painkiller.

но в качестве гг будет Тамплиер
Изображение
как в Hellgate London
hellgate.iahgames.com/gamesite/htmdocs/game_features/faction_templar.asp
Огнестрельное оружие он тоже сможет использовать.

.. блин, может быть(сделаю) :)

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 23.05.2009, 09:47

Мне правда в Oblivion тамплиер больше нравится, но они взяли и заменили крест на какой то ромбик.
Изображение

А в Fallout 3(его делала таже компания что и Oblivion) откровенно впихнули спойлер(в виде цитаты из Библии) в самое начало игры, это скриншот из Fallout 3.
Изображение

Железная логика :)

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 23.05.2009, 19:43

Что бы упростить разработку в качестве персонажей я решил использовать спрайты. По крайней мере пока.

Первое дитя ночи afrit(из hexen), будущая жертва тамплиера, я скачал спрайт отсюда.
sdb.drshnaps.com/display.php?object=501

Изображение
Махает крыльями и вертится вокруг своей оси, но по скриншоту этого не понять.

Программа с исходниками.
mediafire.com/?q0niyjw1ehn
Для запуска нужны шейдеры 1.1 но может и 2.0

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 24.05.2009, 11:23

Rain писал(а):Нахрена профиль cyclodoli удалили ?
Mirror писал(а):По ее просьбе
Изображение

Это я из "Дневники мертвецов" комикс сделал. Классный фильм, советую посмотреть, люди должны знать правду.
Да я тут подумал, разве можно развлекаться когда другим плохо? Лучше все таки rpg про зомби делать, несмотря на неприязнь.

Правда это замедлит разработку.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 11:46

Издатель Sims(но почти разработчик это их главная игра) EA является ещё издателем Dead Space
electronicarts.ru/games/13522,PC/gameinfo/

Так что про зомби можно делать со спокойной совестью(тем более сделать вряд ли получится у меня ведь нет столько денег)

Это реклама из прошлогоднего номера игромании:
Изображение

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 14:10

Я думаю что как смысл этой странной фразы, является то что надо жить, а не выживать :)

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 14:31

Причем если отбросить в сторону реальность(как единственную) этого мира, жить можно вечно :)

Светлояр
Старожил
Сообщения: 1497
Зарегистрирован: 27.09.2008, 22:43

Re: Дневник Templar

Сообщение Светлояр » 25.05.2009, 15:00

Поясни.

Это в духе Лавкрафта: смерть - это только начало?
:)

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 15:21

Ага типа того. Под "реальностью этого мира" я подразумевал атеистическую. По Лавкрафту игру сделали "Зов Ктулху" куда интереснее самой книги только жалко чересчур сложная. Но вообще скорее в духе Клайва Льюиса, "хроники нарнии" и "расторжение брака".

Ставлю себе Oblivion с OOO(говорят самый лучший мод), эт наверн надолго т.к. давно ни во что не играл даже забыл во что играл последний раз. Симс 3 не считается я её только посмотрел.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 16:05

Потом перед тем как делать свою "rpg of the dead", надо будет поиграть deadfrontier.com("мертвый рубеж" гы рубёж :) ) это помойму единственное нормальное что есть на тему зомби рпг но к сожалению 2d на флеше и mmorpg.
Ещё для oblivion есть мод mtes.ru/obliv_zombie_mod.html но с OOO он скорей всего не совместим, да и на мой взгляд "ужас на выживание" с фэнтези плохо стыкуется.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 25.05.2009, 21:41

Если писать программу про зомби сначала на бумаге, то от такого Ужаса даже Лавкрафт в гробу перевернется.....

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 26.05.2009, 11:47

Ну вот, нашел, как называется - "Провал во времени" Retroactive
Этот фильм чуть ли не про меня(в интернете).
Несмотря на бодрую весёлость и ураганную стрельбищу, «Провал во времени» построен на важной мысли о том, что всё всегда складывается наилучшим образом: попробуй вмешаться – и окажешься по колено в крови в окружении горы мертвецов.
afisha.ru/movie/186981/review/278702/

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 26.05.2009, 13:01

Изображение

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 28.05.2009, 15:59

Вобщем то это не значит что я куда-то ушел. Но писать не известно могу-ли ибо демоны.

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 28.05.2009, 17:30

1. youtube.com/watch?v=mgU5sf7R9L4 alone in the dark 5 с песней(из него)
2. smotri.com/video/view/?id=v4844714c10 :lol:

Аватара пользователя
Зеленк
Старожил
Сообщения: 1889
Зарегистрирован: 02.04.2009, 13:22

Re: Дневник Templar

Сообщение Зеленк » 06.06.2009, 23:08

Вобщем про ужасы делать не обязательно и так уже много наделали(и ещё наделают) Делать open source тоже не обязательно, это не популярно.

Пока я остановился на гонке типа NFS.
Изображение
картинку я взял с этого ролика(с высоким качеством скачал из другого места)
youtube.com/watch?v=10lNv0wt0E4

Первым делом надо сделать(на C++, DirectX 9 и HLSL) упрощенный вид игры, что бы было видно что это игра а не просто программа.
Чем я и займусь.

Ответить

Вернуться в «Дневник Templar»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость