Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2011, 20:35   #1
Waqq
Пользователь
 
Регистрация: 16.11.2010
Сообщений: 26
Восклицание Ошибка в переводе кода

Доброго времени суток!
Помогите пожалуйста найти ошибку в переводе кода с С++ на Delphi
C++
Код:
void Terrain::LoadRawFile(const char *FileName, int nSize, BYTE *pHeightMap)
{
	FILE *pFile = NULL;	
	pFile = fopen( FileName, "rb" );

	if ( pFile == NULL )	
	{
		MessageBox(NULL, "Can't find the Height Map data file", "Error", MB_OK);
		return;
	}
	
	fread( pHeightMap, 1, nSize, pFile );
	fclose(pFile);
}
Delphi
Код:
procedure LoadRawFile(const FileName:String;nSize:integer;pHeightMap:BYTE);
var
  pFile:TFileStream;
begin
  pFile:=TFileStream.Create(FileName, fmOpenReadWrite);
if pFile=nil then
    begin
	MessageBox(0, 'Can t find the Height Map data file', 'Error', MB_OK);
        Exit;
    end;
  pFile.ReadBuffer(pHeightMap,1);
  pFile.Destroy;
  end;
C++
Код:
void Terrain::RenderLandscape()
{

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glClearColor(.25f, .25f, .75f, .25f);
	glPushMatrix();

	int x,y,i,j;
	

	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	glColor3f(0,0.5f,0);						
	for (i=0;i<128-1;i++)
	{
		for (j=0;j<128-1;j++)
		{	
			x=i*16;
			y=j*16;

			glBegin(GL_TRIANGLE_STRIP);	
				glVertex3f(x,		y,		HeightMap[i][j]);
				glVertex3f(x+16,	y,		HeightMap[i+1][j]);				
				glVertex3f(x,		y+16,	HeightMap[i][j+1]);		
				glVertex3f(x+16,	y+16,	HeightMap[i+1][j+1]);
			glEnd(); 
		}
	}
}
Delphi
Код:
procedure DrawHeighMap;
var
i,x,y,j:integer;
begin
  glColor3f(0,0.5,0);
    glBegin(GL_TRIANGLE_STRIP);
  for i:=0 to 128 do
   for j:=0 to 128 do
    begin
                          x:=i*16;
			  y:=j*16;
				glVertex3f(x,y,HeightMap[i][j]);
				glVertex3f(x+16,y,HeightMap[i+1][j]);
				glVertex3f(x,y+16,HeightMap[i][j+1]);
				glVertex3f(x+16,y+16,	HeightMap[i+1][j+1]);
			glEnd();
    end;
end;

Последний раз редактировалось Waqq; 06.11.2011 в 21:01.
Waqq вне форума Ответить с цитированием
Старый 07.11.2011, 08:20   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я думаю, объявление
Код:
void Terrain::LoadRawFile(const char *FileName, int nSize, BYTE *pHeightMap)
Надо транслировать вот так
Код:
procedure LoadRawFile(const FileName:String;nSize:integer;pHeightMap:pBYTE);
где pHeightMap: pBYTE получится таким образом
Код:
type 
Thmap = array [что-то] of array [что-то] of byte; // скорее всего  стат.массив
Phmap = ^Thmap ; // возможно потом используется приведение Phmap к pbyte ?_?
var
 heightmap : Thmap ;
и этот pbyte указывает на начало массива heightmap (хотя я не уверен в этом, реализация 2мерных массивов в памяти может быть неявной, и читать в массив просто как в голый буфер... мне странновато, я бы делал сразу поэлементное чтение)
Ну и смущает вот это :
Код:
  pFile.ReadBuffer(pHeightMap,1);
  pFile.Destroy;
на мой взгляд надо:
Код:
  pFile.ReadBuffer(pHeightMap,nSize); // сюда можно сделать проверку равенства считаных байт nsize-y
  pFile.free; // даже freeandnil(pfile);
openGL-кусок кода вообще не соответствует расписанному - нет инициализирующих команд, наименование процедур отличается (хотя оно может и не нужно, но при конверсии всего проекта в либу надо бы иметь совместимость) glBegin(GL_TRIANGLE_STRIP); вне цикла - дорабатывайте!
Но имо - надо обернуть си-код в либу и не париться, только инстанцировать heightmap и вызывать что надо из либы

Последний раз редактировалось phomm; 07.11.2011 в 08:28.
phomm на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка кода waitingforpron Общие вопросы C/C++ 5 01.10.2011 14:24
Ошибка в переводе кода с Turbo Pascal на Fortran abit-2010 Помощь студентам 0 05.07.2011 22:55
ошибка кода street-walker Общие вопросы Delphi 1 17.06.2010 22:32
Ошибка при переводе числа Marsel737 Общие вопросы Delphi 4 06.12.2009 12:56
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47