raycasting floor and ceiling single line error
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
Everybody i had implemented this raycasting engine tutorial https://www.instructables.com/id/Making-a-Basic-3D-Engine-in-Java/
succesfully.
It seems to be based in the lode vandevenne tutorial from this site:
https://lodev.org/cgtutor/raycasting2.html
From the last site i had implemented all the code for floor and celling, rename the variables to match my own (the code is almost the same).
But when i try to "send" my floor texture image information to pixels(the buffer) so it can be rendered, i had a difficulty:
in the original code, this buffer is a matrix[x][y] but i my new code, is a single array. See this is the original:
buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
this is my code:
int flColor = textures.get(flNum).pixels[floorTexY + floorTexX];
pixels [x + y * (width)] = flColor;
i get the texture "id", then pixel information(the problematic part), save it to int flColor, and then send it to pixels array.(with some x / y gibberish).
it is suppose i had just to multiply x * y for get the whole texture information, since is a square. But if i do that, i get an arrayoutofbounds error. Should i forget this approach and try to get a matrix based buffer instead?
HERE Is my whole floor casting source code:
//FLOOR CASTING HERE? lode vandevenne tutorial...
double floorXWall, floorYWall; //x,y position of the
floor texel at the bottom of the wall
// 4 different wall directions possible
if(side == 0 && rayDirX > 0)
{
floorXWall = mapX;
floorYWall = mapY + wallX;
}
else if(side == 0 && rayDirX < 0)
{
floorXWall = mapX + 1.0;
floorYWall = mapY + wallX;
}
else if(side == 1 && rayDirY > 0)
{
floorXWall = mapX + wallX;
floorYWall = mapY;
}
else
{
floorXWall = mapX + wallX;
floorYWall = mapY + 1.0;
}
double distWall, distPlayer, currentDist;
distWall = perpWallDist; // The distance from player to the first wall the ray hit
distPlayer = 0.0;
if (drawEnd < 0) drawEnd = height; //becomes < 0 when the integer overflows. height = screen height.
//draw the floor from drawEnd to the bottom of the screen
for(int y = drawEnd + 1; y < height; y++)
{
currentDist = height / (2.0 * y - height); //you could make a small lookup table for this instead
double weight = (currentDist - distPlayer) / (distWall - distPlayer);
double currentFloorX = weight * floorXWall + (1.0 - weight) * camera.xPos;//posX;
double currentFloorY = weight * floorYWall + (1.0 - weight) * camera.yPos;//posY;
int floorTexX, floorTexY;
floorTexX = (int)((currentFloorX * width) % width);
floorTexY = (int)((currentFloorY * height) % height);
// floor
// buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
int flColor = textures.get(flNum).pixels[floorTexY - floorTexX];
pixels [x + y * (width)] = flColor;
// ceiling (symmetrical!)
// buffer[h - y][x] = texture[6][texWidth * floorTexY + floorTexX];
} //FLOOR AND CEILING END
raycasting
add a comment |
Everybody i had implemented this raycasting engine tutorial https://www.instructables.com/id/Making-a-Basic-3D-Engine-in-Java/
succesfully.
It seems to be based in the lode vandevenne tutorial from this site:
https://lodev.org/cgtutor/raycasting2.html
From the last site i had implemented all the code for floor and celling, rename the variables to match my own (the code is almost the same).
But when i try to "send" my floor texture image information to pixels(the buffer) so it can be rendered, i had a difficulty:
in the original code, this buffer is a matrix[x][y] but i my new code, is a single array. See this is the original:
buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
this is my code:
int flColor = textures.get(flNum).pixels[floorTexY + floorTexX];
pixels [x + y * (width)] = flColor;
i get the texture "id", then pixel information(the problematic part), save it to int flColor, and then send it to pixels array.(with some x / y gibberish).
it is suppose i had just to multiply x * y for get the whole texture information, since is a square. But if i do that, i get an arrayoutofbounds error. Should i forget this approach and try to get a matrix based buffer instead?
HERE Is my whole floor casting source code:
//FLOOR CASTING HERE? lode vandevenne tutorial...
double floorXWall, floorYWall; //x,y position of the
floor texel at the bottom of the wall
// 4 different wall directions possible
if(side == 0 && rayDirX > 0)
{
floorXWall = mapX;
floorYWall = mapY + wallX;
}
else if(side == 0 && rayDirX < 0)
{
floorXWall = mapX + 1.0;
floorYWall = mapY + wallX;
}
else if(side == 1 && rayDirY > 0)
{
floorXWall = mapX + wallX;
floorYWall = mapY;
}
else
{
floorXWall = mapX + wallX;
floorYWall = mapY + 1.0;
}
double distWall, distPlayer, currentDist;
distWall = perpWallDist; // The distance from player to the first wall the ray hit
distPlayer = 0.0;
if (drawEnd < 0) drawEnd = height; //becomes < 0 when the integer overflows. height = screen height.
//draw the floor from drawEnd to the bottom of the screen
for(int y = drawEnd + 1; y < height; y++)
{
currentDist = height / (2.0 * y - height); //you could make a small lookup table for this instead
double weight = (currentDist - distPlayer) / (distWall - distPlayer);
double currentFloorX = weight * floorXWall + (1.0 - weight) * camera.xPos;//posX;
double currentFloorY = weight * floorYWall + (1.0 - weight) * camera.yPos;//posY;
int floorTexX, floorTexY;
floorTexX = (int)((currentFloorX * width) % width);
floorTexY = (int)((currentFloorY * height) % height);
// floor
// buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
int flColor = textures.get(flNum).pixels[floorTexY - floorTexX];
pixels [x + y * (width)] = flColor;
// ceiling (symmetrical!)
// buffer[h - y][x] = texture[6][texWidth * floorTexY + floorTexX];
} //FLOOR AND CEILING END
raycasting
add a comment |
Everybody i had implemented this raycasting engine tutorial https://www.instructables.com/id/Making-a-Basic-3D-Engine-in-Java/
succesfully.
It seems to be based in the lode vandevenne tutorial from this site:
https://lodev.org/cgtutor/raycasting2.html
From the last site i had implemented all the code for floor and celling, rename the variables to match my own (the code is almost the same).
But when i try to "send" my floor texture image information to pixels(the buffer) so it can be rendered, i had a difficulty:
in the original code, this buffer is a matrix[x][y] but i my new code, is a single array. See this is the original:
buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
this is my code:
int flColor = textures.get(flNum).pixels[floorTexY + floorTexX];
pixels [x + y * (width)] = flColor;
i get the texture "id", then pixel information(the problematic part), save it to int flColor, and then send it to pixels array.(with some x / y gibberish).
it is suppose i had just to multiply x * y for get the whole texture information, since is a square. But if i do that, i get an arrayoutofbounds error. Should i forget this approach and try to get a matrix based buffer instead?
HERE Is my whole floor casting source code:
//FLOOR CASTING HERE? lode vandevenne tutorial...
double floorXWall, floorYWall; //x,y position of the
floor texel at the bottom of the wall
// 4 different wall directions possible
if(side == 0 && rayDirX > 0)
{
floorXWall = mapX;
floorYWall = mapY + wallX;
}
else if(side == 0 && rayDirX < 0)
{
floorXWall = mapX + 1.0;
floorYWall = mapY + wallX;
}
else if(side == 1 && rayDirY > 0)
{
floorXWall = mapX + wallX;
floorYWall = mapY;
}
else
{
floorXWall = mapX + wallX;
floorYWall = mapY + 1.0;
}
double distWall, distPlayer, currentDist;
distWall = perpWallDist; // The distance from player to the first wall the ray hit
distPlayer = 0.0;
if (drawEnd < 0) drawEnd = height; //becomes < 0 when the integer overflows. height = screen height.
//draw the floor from drawEnd to the bottom of the screen
for(int y = drawEnd + 1; y < height; y++)
{
currentDist = height / (2.0 * y - height); //you could make a small lookup table for this instead
double weight = (currentDist - distPlayer) / (distWall - distPlayer);
double currentFloorX = weight * floorXWall + (1.0 - weight) * camera.xPos;//posX;
double currentFloorY = weight * floorYWall + (1.0 - weight) * camera.yPos;//posY;
int floorTexX, floorTexY;
floorTexX = (int)((currentFloorX * width) % width);
floorTexY = (int)((currentFloorY * height) % height);
// floor
// buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
int flColor = textures.get(flNum).pixels[floorTexY - floorTexX];
pixels [x + y * (width)] = flColor;
// ceiling (symmetrical!)
// buffer[h - y][x] = texture[6][texWidth * floorTexY + floorTexX];
} //FLOOR AND CEILING END
raycasting
Everybody i had implemented this raycasting engine tutorial https://www.instructables.com/id/Making-a-Basic-3D-Engine-in-Java/
succesfully.
It seems to be based in the lode vandevenne tutorial from this site:
https://lodev.org/cgtutor/raycasting2.html
From the last site i had implemented all the code for floor and celling, rename the variables to match my own (the code is almost the same).
But when i try to "send" my floor texture image information to pixels(the buffer) so it can be rendered, i had a difficulty:
in the original code, this buffer is a matrix[x][y] but i my new code, is a single array. See this is the original:
buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
this is my code:
int flColor = textures.get(flNum).pixels[floorTexY + floorTexX];
pixels [x + y * (width)] = flColor;
i get the texture "id", then pixel information(the problematic part), save it to int flColor, and then send it to pixels array.(with some x / y gibberish).
it is suppose i had just to multiply x * y for get the whole texture information, since is a square. But if i do that, i get an arrayoutofbounds error. Should i forget this approach and try to get a matrix based buffer instead?
HERE Is my whole floor casting source code:
//FLOOR CASTING HERE? lode vandevenne tutorial...
double floorXWall, floorYWall; //x,y position of the
floor texel at the bottom of the wall
// 4 different wall directions possible
if(side == 0 && rayDirX > 0)
{
floorXWall = mapX;
floorYWall = mapY + wallX;
}
else if(side == 0 && rayDirX < 0)
{
floorXWall = mapX + 1.0;
floorYWall = mapY + wallX;
}
else if(side == 1 && rayDirY > 0)
{
floorXWall = mapX + wallX;
floorYWall = mapY;
}
else
{
floorXWall = mapX + wallX;
floorYWall = mapY + 1.0;
}
double distWall, distPlayer, currentDist;
distWall = perpWallDist; // The distance from player to the first wall the ray hit
distPlayer = 0.0;
if (drawEnd < 0) drawEnd = height; //becomes < 0 when the integer overflows. height = screen height.
//draw the floor from drawEnd to the bottom of the screen
for(int y = drawEnd + 1; y < height; y++)
{
currentDist = height / (2.0 * y - height); //you could make a small lookup table for this instead
double weight = (currentDist - distPlayer) / (distWall - distPlayer);
double currentFloorX = weight * floorXWall + (1.0 - weight) * camera.xPos;//posX;
double currentFloorY = weight * floorYWall + (1.0 - weight) * camera.yPos;//posY;
int floorTexX, floorTexY;
floorTexX = (int)((currentFloorX * width) % width);
floorTexY = (int)((currentFloorY * height) % height);
// floor
// buffer[y][x] = (texture[3][texWidth * floorTexY + floorTexX] >> 1) & 8355711;
int flColor = textures.get(flNum).pixels[floorTexY - floorTexX];
pixels [x + y * (width)] = flColor;
// ceiling (symmetrical!)
// buffer[h - y][x] = texture[6][texWidth * floorTexY + floorTexX];
} //FLOOR AND CEILING END
raycasting
raycasting
asked Nov 16 '18 at 15:37
IMEDIMED
12
12
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341023%2fraycasting-floor-and-ceiling-single-line-error%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341023%2fraycasting-floor-and-ceiling-single-line-error%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown